一、背景
目前公司大部分项目都是通过开发走流程和测试执行用例来保证开发和测试质量的,当遇到开发周期短开发和测试无法验证所有的流程时就可能出现不可预料的问题。
自动化的测试(单元测试、UI自动化测试等)是保证开发和产品质量的重要保障,如果测试案例足够完整,那通过执行测试用例就可以检查出基本的问题,确保问题在开发测消化,给测试同事一个质量高的版本以减少测试工作量,提高产品的交付速度和质量。 想到原来团队的支付模块(包含优惠券、凑单、白条、拼单、银行卡支付、京东支付、微信支付、零钱支付、组合支付等非常复杂的支付体系)平均每天数亿元的支付量,大促期间可能有数十亿元的支付量,整个流程又极其复杂并且不允许有任何问题出现,因此每改一个再小的功能都会要求测试把所有的流程要验证一遍,执行用例的工作量是很大的。当初测试团队是通过UI自动化测试来执行用例的,这保证了模块的质量并且减轻了测试的工作量,并且可以利用一台机器定时去执行UI自动化测试用例,通过这种方式保证了支付模块的稳定性。因此决定尝试下UI自动化测试是否能够用于我们的项目。
二、初步尝试
UI自动化测试是指通过编写自动化脚本来模拟用户与应用程序的交互,测试应用程序的用户界面是否正常工作。这些自动化脚本可以模拟用户的点击、输入和其他交互动作,以及验证应用程序的响应和预期结果。UI自动化测试可以帮助开发团队检测和解决用户界面的问题,提高应用程序的质量和稳定性。常见的UI自动化测试工具包括Selenium、Appium和Cypress等。
通过调研决定使用基于Python + Selenium的UI自动化测试方案。
Selenium是一个流行的自动化测试框架,用于测试Web应用程序的用户界面。它提供了一组功能强大的工具和库,允许开发人员使用多种编程语言(如Java、Python、C#、JavaScript等)编写自动化测试脚本。
Selenium可以模拟用户在浏览器中的交互行为,例如点击按钮、输入文本、选择下拉菜单等。它支持各种浏览器,包括Chrome、Firefox、Safari等,并且可以在不同的操作系统上运行。
Selenium的核心组件包括:
- Selenium WebDriver:用于控制浏览器并执行测试操作的API。
- Selenium Grid:用于在多个浏览器和操作系统上并行运行测试的工具。
- Selenium IDE:一个浏览器插件,用于录制和回放用户界面操作,生成测试脚本。
使用Selenium,您可以编写灵活、可靠的自动化测试脚本,验证Web应用程序的功能和用户界面是否正常工作。它是一个广泛使用的工具,被许多开发团队和测试团队用于构建自动化测试套件。
如果想开始单元测试需要学习Python和Selenium,花了几天时间学习了Python和Selenium,实现了一个基础版的登陆流程的自动化测试。期间搭建Python开发环境以及安装Selenium以及对于的Chrome对应的webdriver,由于网上大部分都是老版本的资料,导致经常运行不起来,于是去系统看了Selenium官网,最终实现了登陆功能的测试用例,如下所示:
js
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://star-agw.qhhrly.cn/#/login')
# 等待加载
driver.implicitly_wait(4)
# 获取登录按钮
element=driver.find_element(By.CLASS_NAME, value='login-com-btn')
# 用户名输入框
userAccountEle = driver.find_element(By.ID, value="userAccout")
# 密码输入框
passwordEle = driver.find_element(By.CSS_SELECTOR, value='input[type="password"]')
# 验证码输入框
veriCodeEle = driver.find_element(By.CSS_SELECTOR, value='input[placeholder="请输入验证码"]')
# 输入登录信息和验证码
userAccountEle.send_keys('admin')
passwordEle.send_keys('Aa1234..')
veriCodeEle.send_keys('1234')
# 点击登录
element.click()
执行效果如下:
于是决定实现建档流程的测试用例,而有些页面的css命名不好查询,又要不停的验证,还需要去深入学习Selenium知识,也蛮费时间的,于是想通过开源的工来辅助写自动化测试用例,而Selenium正好有一个浏览器插件,用于录制和回放用户界面操作,生成测试脚本,于是决定去试试。
三、借助Selenium IDE,自动化生成自动化测试用例的探索
Selenium IDE是一种用于自动化Web应用程序测试的工具。它是一个浏览器插件,可以记录和回放用户在浏览器中执行的操作。Selenium IDE具有简单易用的界面,可以帮助用户快速创建和编辑测试用例。有以下特点:
- 它支持多种浏览器,包括Chrome、Firefox和Safari。
- Selenium IDE可以将测试用例导出为不同的编程语言,如Java、Python和C#,以便在测试框架中使用。
- 它还提供了丰富的断言和验证功能,可以检查页面上的元素和内容。
- Selenium IDE是一个功能强大的工具,可以在开发过程中提高测试效率和准确性。
接下来看下它生成一个创建产品的UI自动化测试用例有多简单:
(1)、生成新建产品自动化测试用例
新建一个open命令,target输入基础版的地址,如下所示:
(2)、点击右上角录制
将会使用WebDriver模拟Chrome浏览器打开基础版的登陆页面,接着会抓取你的每一个操作作为自动化测试用例,过程如下所示:
根据你的操作生成的用例如下所示:
(3)、测试下脚本是否可运行,可以看到它执行了上面生成的用例且帮我们新建了一个产品
(4)、它也可以导出很多语言的脚本
以上就是生成UI自动化测试用例的流程,它不需要使用者有任何UI测试的基础知识。
四、一些思考
如果UI测试用例的编写或者生成足够简单方便,那大家的使用成本会降低,对提升开发质量和减轻测试的压力一定会有很大的帮助。未来可以把一些工具(包括自研与开源)与测试团队的自动化测试系统融合,或许可以帮我们做很多事情:
1、通过类似于Selenium IDE这样的工具或者自研工具,录制用户操作或者其它方式自动化生成UI测试用例;
2、工具可以生成用例也可以执行用例;
3、生成的用例可以导出为Python等多种语言与测试团队的系统对接;
4、测试同事只需要根据用例构造测试用例所需要的数据,自动执行,只需要关注结果是否是预期结果;
5、定时执行用例并与页面错误收集工具结合,实时上报异常数据,并通知开发;
6、开发也可以使用工具生成用例,验证流程,提升质量。