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

    相关文章

    Vue和React受控组件的区别小结

    《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

    使用Python实现Word文档的自动化对比方案

    《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

    Python自动化处理PDF文档的操作完整指南

    《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

    基于Python实现自动化邮件发送系统的完整指南

    《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

    Python实战之SEO优化自动化工具开发指南

    《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

    Python使用python-pptx自动化操作和生成PPT

    《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

    基于Python编写自动化邮件发送程序(进阶版)

    《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

    基于Python Playwright进行前端性能测试的脚本实现

    《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

    Python调用LibreOffice处理自动化文档的完整指南

    《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

    Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

    《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶