简介
Web端UI自动化测试
- 常见UI自动化测试框架
- Selenium
- 支持多平台,支持多浏览器,多语言(C、 java、ruby、python、或都是C#)
- 支持分布式
- Cypress 基于JS开源
- 支持代理,但是无法使用socks5代理
- CodeceptJS 基于JS开源
- 支持不同的helper:WebDriver,Puppeteer,Protractor,Nightmare,Testcafe
WebDriver
就像是一个媒介,代码驱动webdriver。不同浏览器有不同的webdriver,例如火狐的FirefoxDriver,谷歌的 ChromeDriver- 对应有一个测试框架为WebDriver,之后被Selenium2集成
Puppeteer
是一个 Node 库,提供接口来控制 headless Chrome。Headless Chrome是一种不使用 Chrome 来运行 Chrome 浏览器的方式
- 支持web也支持mobile
- 提供了现成的codeceptjs-resemblehelper以实现视觉上的回归测试
- 支持API测试,包括REST和GraphQL
- 可使用socks5等代理
- 支持不同的helper:WebDriver,Puppeteer,Protractor,Nightmare,Testcafe
- jenkins插件
cucumber reports
测试报告可视化插件Allure Jenkins Plugin
测试报告可视化插件
- Selenium
- 实践
- 让UI测试更稳定,开发时把页面的关键组件元素加上ID 属性,用唯一的ID去定位元素就稳定多了
- 项目还需要有高度可视化或者能及时通知测试状态的方式。如可使用Jenkins自带的 Build Monitor View,将对项目pipeline的监控投影到电视上,并配置相应的提示音
移动端测试
UI自动化测试
- 业界UI测试工具发展迅速,目前有Robotium、Appium、Espresso、UIAutomator、Calabash等等,其中在Android中应用最广泛的当属UIAutomator、Robotium、Appium
- Airtest(网易)、autojs
UIAutomator | Robotium | Appium | |
---|---|---|---|
支持平台 | Android | Android,H5 | Android,iOS,H5 |
脚本语言 | Java | Java | Almost any |
是否支持无源码测试 | Yes | Yes | Yes |
支持 API 级别 | 16+ | All | All |
真机测试
- 参考:https://tech.meituan.com/2018/07/19/cloud-phone.html
OpenSTF
开发真机测试平台- minicap、minitouch
相关组件
后端代码测试
- Java代码测试
Junit
参考junit.mdTestNG
是Java中的一个测试框架,类似于JUnit和NUnit,功能都差不多,只是功能更加强大,使用也更方便
性能测试
jmeter
httpd-tools(ab)
- 测试
1 | ## 安装 |
- 测试结果
1 | # ab -n1000 -c10 http://study.163.com/ |
- 测试案例
1 | ## 2C4G SpringBoot应用非常简单的数据库查询 |
其他框架
- 移动App兼容性测试工具Spider
Selenium
- 相关组件
- Selenium:web自动化测试工具集,包括IDE、Grid、RC(selenium 1.0)、WebDriver(selenium 2.0)等
- Selenium IDE:浏览器的一个插件,提供简单的脚本录制、编辑与回放功能
- Selenium Grid:是用来对测试脚步做分布式处理,现在已经集成到selenium server 中了
puppeteer
Cypress
CodeceptJS
appium移动端自动化测试框架
- 介绍
- 官网:http://appium.io/
- Appium 的核心一个是暴露 REST API 的 WEB 服务器。它接受来自客户端的连接,监听命令并在移动设备(支持Android,iOS,H5)上执行,答复 HTTP 响应来描述执行结果
- 安装
- 需要安装Java JDK 、Android SDK
- appium服务端安装:
npm install -g appium
(v1.18.0,需要node > 10),安装成功后可执行appium
查看(或者基于Appium Desktop启动) - Appium Desktop 服务器图形管理工具安装(可选)
- 客户端:如通过python在写测试脚本的时候可以使用库
pip install Appium-Python-Client
简单案例参考
- 参考:https://blog.csdn.net/u013314786/article/details/105768650
- 安装夜神模拟器 v6.6.1.2
- 查看设备
adb connect 127.0.0.1:62001
adb devices
- 需要保证模拟器版本和Android SDK的adb.exe版本一直,可将模拟器的adb.exe覆盖掉Android SDK的
- 在模拟器上安装测试apk
- 查看设备
基础信息获取
1
2
3
4
5# 获取模拟器或手机的Android内核版本号,或者直接在手机或模拟器上查看
adb shell getprop ro.build.version.release # 5.1.1
# 获取deviceName设备名称。如果是真机,在'设置->关于手机->设备名称'里查看,或者`adb devices -l`中model的值;如果是模拟器,夜神模拟器为`127.0.0.1:62001`
# (%ANDROID_HOME%/platform-tools下运行)获取appPackage名(package: name=的值)和appActivity(launchable activity name=的值)
aapt dump badging D:/apk/com.youdao.calculator-2.0.0.apk # com.youdao.calculator 和 com.youdao.calculator.activities.MainActivity启动Appium Desktop
- 启动服务器 - 显示
Appium REST http interface listener started on 0.0.0.0:4723
则启动成功
- 启动服务器 - 显示
查看元素标识(id/xpath)
- Appium Desktop - File - New Session Window
自动设定 - 所需功能 - JSON Representation(复制下列代码) - 保存 - 启动会话(会连接到模拟器并显示出app界面)
1
2
3
4
5
6
7
8
9
10// platformName定义为 Android | IOS
{
"platformName": "Android",
"platformVersion": "5.1.1",
"deviceName": "127.0.0.1:62001",
"appPackage": "com.youdao.calculator",
"appActivity": "com.youdao.calculator.activities.MainActivity",
"resetKeyboard": true,
"unicodeKeyboard": true
}
测试脚本参考github
- 启动测试脚本也会连接模拟器,然后生成测试报告
OpenSTF移动设备共享平台
- 介绍
- github
- 官网 停止维护
- 类似
- Smartphone Test Farm(简称STF)是一个web应用程序,主要用于从指定的浏览器中远程调试智能手机、智能手表等,可远程调试超过160多台设备
- 百度MTC的远程真机调试、Testin的云真机、腾讯WeTest的云真机、阿里MQC的远程真机租用都是基于STF进行改进的 ^1
- 免费真机云测
- 华为云调试:部分机型每天会赠送一定的优惠时长(300min)
- 支持本地上传APK应用
- 华为云调试:部分机型每天会赠送一定的优惠时长(300min)
- 缺点:存在Android部分设备易掉线、IOS高版本不兼容、操作卡顿等现象
- 原理
- 通过adb连接Android设备
- STF获取移动设备屏幕:基于minicap(STF开源)组件截取Android设备屏幕,并将突破以socket方式发给stf服务端,然后stf服务端通过wesocket转发给web端进行显示
- STF将touch动作同步给移动设备:基于minitouch(STF开源)组件
- 安装 ^2
1 | ## 安装(最好顺序启动)。此案例是在Windows-Docker中按照 |
SikuliX桌面自动化方案
- Sikuli(X)是一种新颖的图形脚本语言,或者说是一种另类的自动化测试技术。通过OCR技术,使用图片来作为脚本的识别点/触发点,来进行操作
- 参考文章
- 默认不支持对中文OCR,需要额外包
测试用例
硬件测试
磁盘
块存储和文件存储的测试重点也不一样
块存储测试:fio/iozone是两个典型的测试工具,重点测试IOPS,延迟和带宽
1
2
3
4# fio -filename=/dev/sdc -iodepth=${iodepth} -direct=1 -bs=${bs} -size=100% --rw=${iotype} -thread -time_based -runtime=600 -ioengine=${ioengine} -group_reporting -name=fioTest
# 测试IOPS:iodepth=32/64/128,bs=4k/8k,rw=randread/randwrite,ioengine=libaio
# 测试延迟:iodepth=1,bs=4k/8k,rw=randread/randwrite,ioengine=sync
# 测试带宽:iodepth=32/64/128,bs=512k/1m,rw=read/write,ioengine=libaiofio/vdbench/mdtest是测试文件系统常用的工具。fio/vdbench用来评估IOPS,延迟和带宽;mdtest评估文件系统元数据性能,主要测试指标是creation和stat,需要采用mpirun并发测试
1
2
3
4
5
6
7# fio -filename=/mnt/yrfs/fio.test -iodepth=1 -direct=1 -bs=${bs} -size=500G --rw=${iotype} -numjobs=${numjobs} -time_based -runtime=600 -ioengine=sync -group_reporting -name=fioTest
# 与块存储的测试参数有一个很大区别,就是ioengine都是用的sync,用numjobs替换iodepth
# 测试IOPS:bs=4k/8k,rw=randread/randwrite,numjobs=32/64
# 测试延迟:bs=4k/8k,rw=randread/randwrite,numjobs=1
# 测试带宽:bs=512k/1m,rw=read/write,numjobs=32/64
# mpirun --allow-run-as-root -mca btl_openib_allow_ib 1 -host yanrong-node0:${slots},yanrong-node1:${slots},yanrong-node2:${slots} -np ${num_procs} mdtest -C -T -d /mnt/yrfs/mdtest -i 1 -I ${files_per_dir} -z 2 -b 8 -L -F -r -u
fio 工具
- fio使用
1 | ## 安装 |
- 使用案例(基于阿里云80G SSD硬盘进行)
1 | touch ~/test |
- 基于配置文件测试
1 | # 基于下文配置文件fio.conf进行测试 |
参考文章