React Native 【自动化测试=E2E】-【Detox】

2023-10-12 23:30

本文主要是介绍React Native 【自动化测试=E2E】-【Detox】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

废话

最近有朋友说React Native 自动化测试这块网上鲜有教程,正好我们的项目中有这样的实践,特地拿出来显摆显摆,嘿嘿,开个玩笑啊别介意,废话不多说,开始讲解

Detox

detox 是移动应用程序的灰盒端到端测试和自动化框架。

移动自动化测试中最困难的部分是测试金字塔的顶端 - E2E。 E2E测试的核心问题是片状的 - 测试通常不是确定性的。我们认为解决片状问题的唯一方法是从黑盒测试转向灰盒测试。这就是Detox发挥作用的地方。

优点:

- 跨平台

用JavaScript编写跨平台测试。目前支持iOS,Android

- 在真机上运行

(iOS尚未支持):通过在设备/模拟器上测试您的应用程序,就像真实用户一样

- 自动同步

通过监控应用程序中的异步操作,可以在核心处停止

- 为CI而做

在像Travis这样的CI平台上执行您的E2E测试,Jenkins不清楚支不支持,后期有经验了会出这个教程,应该是支持的。

- 测试独立

使用您喜欢的Mocha,AVA或任何其他JavaScript测试运行器

- 可调试

Modern async-await API允许异步测试中的断点 按预期工作。

以上是官方对它的介绍,从目前来看,这个框架基本达到我们的预期,是可以尝试一下的。

环境配置

ios自动化测试要求:

- Mac with macOS (at least macOS El Capitan 10.11)
- Xcode 8.3+ with Xcode command line tools
通过在终端中键入gcc -v来验证是否已安装Xcode命令行工具(如果未安装则显示弹出窗口)

安装依赖:

1. Install the latest version of Homebrew

Homebrew是macOS的包管理器,我们需要它来安装其他命令行工具。

终端输入:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2. Install Node.js

Node是Detox将运行的JavaScript运行时。安装节点8.3.0或更高版本

终端 输入: brew update && brew install node

3. Install applesimutils

用于Apple模拟器的utils集合,Detox使用它与模拟器进行通信。

终端驶入:
brew tap wix/brew
brew install applesimutils

通过键入终端applesimutils来输出工具帮助信息,验证它是否有效

4. Install Detox command line tools (detox-cli)

该软件包使命令行中的Detox更容易操作。 detox-cli应该全局安装,允许在npm脚本之外使用命令行工具。 detox-cli只是一个脚本,它将命令传递给detox包中提供的命令行工具(在node_modules / .bin / detox中)

npm install -g detox-cli

注意:官方说的是全局安装,但实际使用过程中,本人实在RN项目的根目录中使用的该命令跑成功就可以了

5. Add Detox to your project

在RN项目根目录的终端里输入一下安装命令

 npm install detox --save-dev

6. Install a test runner

您可以使用任何JavaScript测试运行器。 Detox CLI支持开箱即用的Jest和Mocha

这里跳过Jest 建议使用 Mocha 同样在项目根目录执行

npm install mocha --save-dev

7. Add Detox config to package.json

"detox": {
       "configurations": {
                "ios.sim.debug": {
                        "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/example.app",
                         "build": "xcodebuild -project ios/example.xcodeproj -scheme example -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build",
                          "type": "ios.simulator", "name": "iPhone 7"
                }
         }
 }

如图:放到 package.json 这里

图1

如图配置,需要将下图中三个地方改成ios项目的名字。
ios/build/Build/Products/Debug-iphonesimulator/example.app
xcodebuild -project ios/example.xcodeproj -scheme example -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build

图2

以上步骤顺利进行的话,接下来可以写测试代码了。

Create your first test

项目根目录输入一下命令

detox init -r mocha

这个命令将在项目的根目录创建一个e2e目录,如图3

图3

Build your app and run Detox tests

detox build

实际执行的是这段命令如图4

图4

最终结果如图5,看到BUILD SUCCEEDED 说明打包成功,马上就可以真正测试了

图5

detox test

输入以上命令后,模拟器会启动,然后自动跑firstTest.spec.js文件中的测试用例,同时终端有如下输输出:

图6

同时如图7所指,测试输出是跟代码中 it 函数第一个参数是一致的,有多少个it就会有多少个测试输出。

图7

测试用例已经跑了起来,下面简单说下语法。

1. 如何找到组件 如图8
图8
2. 找到组件能干嘛,如图9
图9

简单例子:

await element(by.id('tappable')).tap();  

await element(by.id('tappable')).longPress();

await element(by.id('tappable')).multiTap(3);

await element(by.id('tappable')).tapAtPoint({x:5, y:10});

await element(by.id('textField')).typeText('passcode');

await element(by.id('textField')).replaceText('passcode again');

await element(by.id('textField')).clearText();

await element(by.id('scrollView')).scroll(100, 'down');

await element(by.id('scrollView')).scroll(100, 'up');

await element(by.id('scrollView')).scrollTo('bottom');

await element(by.id('scrollView')).scrollTo('top');

await element(by.id('scrollView')).swipe('down');

await element(by.id('scrollView')).swipe('down', 'fast');

await element(by.id('scrollView')).swipe('down', 'fast', 0.5);

await expect(element(by.type('UIPickerView'))).toBeVisible();

await element(by.type('UIPickerView')).setColumnToValue(1,"6");

await element(by.type('UIPickerView')).setColumnToValue(2,"34");

3. 如何验证结果 如图10
图10

简单例子:

await expect(element(by.id('UniqueId204'))).toBeVisible();

await expect(element(by.id('UniqueId205'))).toBeNotVisible();

await expect(element(by.id('UniqueId205'))).toExist();

await expect(element(by.id('RandomJunk959'))).toNotExist();

await expect(element(by.id('UniqueId204'))).toHaveText('I contain some text');

await expect(element(by.id('UniqueId204'))).toHaveLabel('Done');

await expect(element(by.text('I contain some text'))).toHaveId('UniqueId204');

await expect(element(by.id('UniqueId533'))).toHaveValue('0');

到此就简单介绍到这里,更详细的请看官方文档,如有疑问,请留言给我。

总结

在实践了这段时间以来,碰到了不少问题,这里介绍的是IOS的测试,相对来说还简单一些,Android的配置就有些复杂,下次专门介绍下Android的环境配置。


http://www.taodudu.cc/news/show-7938893.html

相关文章:

  • React-Native移动应用自动化测试框架Detox简介
  • 手把手教你创建第一个React Native自动化测试工具Detox
  • Detox:用于 react-native 应用程序的灰盒端到端测试自动化框架
  • Android MaterialYouFileExplorer 文件浏览器(选择器)
  • 计算机语音mod,霞 the Rebel 音效模组-电脑头部跟踪和语音类型
  • pandas数据处理学习总结
  • 我与DOM的第一次邂逅
  • 使用 pandas 处理 CSV 文件
  • CMU 15-445 Project #3 - Query Execution(Task #1、Task #2)
  • java零基础(二)
  • Android实现ViewPager适配器kotlin简单实现
  • 利用清华和科大镜像源全程国内同步Android源码
  • office2016表格中的文字(英文)居中
  • html 表格添加连接,html中表格怎么连接
  • 【Putty】win10 / win 11:SSH 远程连接工具 Putty 下载、安装
  • JS8 -- 跨域
  • JS-8-数组
  • UM告诉我:not offered
  • 计算机网络原理学习笔记——广域网
  • python代码实现数据可视化
  • cisco packet tracer_用户使用文档/命令行文档(by official offered)
  • 余华《活着》读后感
  • 估值10亿美元的网红机器人那些事儿
  • 马斯克上传大脑很疯狂,Neuralink却早已一地鸡毛
  • 达闼科技更新招股书:打造5G时代“云端机器人”全球第一股
  • 【年终盘点】2018年十大新型机器人
  • 常见的四足机器人的特点和区别
  • 常州巨人机器人_关于我们 - 常州市巨人机器人科技有限公司
  • 人形机器人、脑机、超级计算机,马斯克还有哪些超级探索?
  • 日本这款人形机器人竟是多个机器人乐队的前辈!拥有人类骨骼,还会击鼓
  • 这篇关于React Native 【自动化测试=E2E】-【Detox】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/199195

    相关文章

    详解如何使用Python构建从数据到文档的自动化工作流

    《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

    Python实现自动化Word文档样式复制与内容生成

    《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

    pytest+allure环境搭建+自动化实践过程

    《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

    如何基于Python开发一个微信自动化工具

    《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

    python多线程并发测试过程

    《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

    Python使用python-docx实现自动化处理Word文档

    《Python使用python-docx实现自动化处理Word文档》这篇文章主要为大家展示了Python如何通过代码实现段落样式复制,HTML表格转Word表格以及动态生成可定制化模板的功能,感兴趣的... 目录一、引言二、核心功能模块解析1. 段落样式与图片复制2. html表格转Word表格3. 模板生

    使用Python自动化生成PPT并结合LLM生成内容的代码解析

    《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

    Nginx部署React项目时重定向循环问题的解决方案

    《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

    在React聊天应用中实现图片上传功能

    《在React聊天应用中实现图片上传功能》在现代聊天应用中,除了文字和表情,图片分享也是一个重要的功能,本文将详细介绍如何在基于React的聊天应用中实现图片上传和预览功能,感兴趣的小伙伴跟着小编一起... 目录技术栈实现步骤1. 消息组件改造2. 图片预览组件3. 聊天输入组件改造功能特点使用说明注意事项

    在React中引入Tailwind CSS的完整指南

    《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目