背景
自动化测试Case转化,是测试开发工程师日常不断重复的工作。
这部分工作复杂度较低,重复性高。零Coding俨然是行业的一个趋势。
有没有什么工具可以帮助我们更高效的编写自动化测试?
另一方面,在云原生时代的大背景下,基础设施的能力越来越强大。
开发人员只需要关注自己业务逻辑的实现,不再纠结于日志、埋点、安全等。
测试也一样,我们需要更加专注业务逻辑的测试代码,提高自动化测试的稳定性和缺陷转化率。让系统或基础设施帮助我们去完成日志、报告、分析等。
在查找问题的过程中,偶尔发现了这款强大的测试平台——Test Project
它拥有脚本录制和代码生成能力,以及测试所需的云服务能力。
这些正好满足我们上述的两个需求。
今天就来介绍一下这款强大的测试平台。
安装
1、创建账号
https://app.testproject.io/signup/
服务器在外网,可能会比较慢,不用代理是可以注册的。
详细请参考:官方文档
2、安装并配置TestProject Agent
下载:https://app.testproject.io/#/download
Agent通过流量监控,将本地执行的测试日志上传到云服务器。
官方宣称,一旦你装了Agent后,就不需要再安装任何驱动和框架,从而开展自动化测试了。
安装后跟随引导进行配置。
打开:http://localhost:8585/
如果可以看到连接信息,说明配置成功。
3、获取TP_Token
在https://app.testproject.io/#/integrations/sdk生成token
Token是打通本地测试到云服务的关键。测试信息就是通过它上传到云服务器的。
Token 需要配置到环境变量中,或者直接写在WebDriver参数里。
4、安装Test Project SDK
目前Test Project支持Java、C#和Python的SDK。
我们以Python为例来介绍。
安装:
pip install testproject-python-sdk
5、调试
Test Project支持Selenium和Appium测试用例
我们先用slenium自有的模式来创建一个测试用例:
from selenium import webdriver
def test_register_user():
url = 'https://example.testproject.io/web/'
full_name = 'Sonic Gao'
password = '12345'
# set the driver instance
driver = webdriver.Chrome()
# browse to the endpoint
driver.get(url)
# enter full name
driver.find_element_by_id("name").send_keys(full_name)
# enter a password
driver.find_element_by_id("password").send_keys(password)
# enter a password
driver.find_element_by_id("login").click()
# get name text from greeting message
name = driver.find_element_by_xpath('/html[1]/body[1]/div[2]/div[2]/p[1]/b[1]').text
# confirm name in greeting message matches full name
assert name == full_name
# quit the driver
driver.quit()
if __name__ == '__main__':
test_register_user()
使用Pytest执行
python web_test.py
执行后会得到一个简短的结果
<...>
collecting ...
Python/UI/TestProject/se.py ✓ 100% ██████████
Results (4.16s):
1 passed
再使用TestProject的方式来创建同样的测试用例。
不同的两点是:
1)从引用selenium变成了引用TestProject Python SDK
2)Chrome需要传入Agent Token作为参数
# 引用 TestProject Python SDK
from src.testproject.sdk.drivers import webdriver
def test_register_user():
url = 'https://example.testproject.io/web/'
full_name = 'Sonic Gao'
password = '12345'
# set the driver instance 这里的token就是我们配置好Agent后获得的
driver = webdriver.Chrome(token="****C9WLQ0flFfVJJ65OzM36Ri1I16bShu5s0-To1")
# browse to the endpoint
driver.get(url)
# enter full name
driver.find_element_by_id("name").send_keys(full_name)
# enter a password
driver.find_element_by_id("password").send_keys(password)
# enter a password
driver.find_element_by_id("login").click()
# get name text from greeting message
name = driver.find_element_by_xpath('/html[1]/body[1]/div[2]/div[2]/p[1]/b[1]').text
# confirm name in greeting message matches full name
assert name == full_name
# quit the driver
driver.quit()
if __name__ == '__main__':
test_register_user()
执行一下看看有什么不同。
<...>
2021-04-02 10:23:03,664 INFO Token used as specified in constructor: W5Psyd-C9WLQ0flFfVJJ65OzM36Ri1I16bShu5s0-To1
2021-04-02 10:23:03,731 INFO No Agent service address found in TP_AGENT_URL environment variable, defaulting to http://127.0.0.1:8585 (localhost)
2021-04-02 10:23:03,736 INFO SDK version: 0.65.3
2021-04-02 10:23:03,737 INFO Session request: {'projectName': 'Unnamed Project', 'jobName': 'sp_sdk', 'capabilities': {'browserName': 'chrome', 'version': '', 'platform': 'ANY', 'goog:chromeOptions': {'extensions': [], 'args': []}}, 'sdkVersion': '0.65.3', 'language': 'Python'}
2021-04-02 10:23:16,830 INFO Socket connection to 127.0.0.1:62661 established successfully
2021-04-02 10:23:16,831 INFO Development session started...
2021-04-02 10:23:16,836 INFO Session ID is d42718619fa75b65a5a5824532f471bf
我们可以看到,测试信息通过Agent上传到了云服务。
打开https://app.testproject.io/#/reports 就可以看到测试报告了。
报告很简洁,详情中还记录了每个Step的操作信息。
看到这里也许还是没有什么新奇的。
接下来我们继续介绍TestProject的其他特性。
特性
1、自动化脚本录制
自动化Case的转化和维护,占了测试开发人员大部分的工作比例。
如果提升这部分的效率,或者让业务测试人员更容易的参与进来,是提测效能提升的关键。
目前有很多自动化录制和代码生成框架,例如微软推出的Playwright。
TestProject也提供这种能力。
首先通过平台创建一个测试Case:可以支持Web、Mobile和代码包的方式。
选择任意一种类型创建,
选择录制或者编辑的方式,编写测试用例。
TestProject会打开一个单独的页面来创建新的用例。
如果选择了录制方式,平台就会记录页面行为,通过定义元素的操作和预期,完成断言。
编辑用例也是通过写伪代码的方式录制脚本。
录制界面如下:
使用TestProject录制算是一个轻松的过程。
系统封装了各类常见的页面操作。
也提供了很多便利的功能,例如从指定步骤开始、AI错误分析等。
2、代码生成
在测试用例页面,可以将录制好的脚本生成代码。
目前支持Java、C#、Python语言。
以Python为例,可以生成漂亮的Pytest代码。
录制后的脚本也可以很好的在本地执行。
3、Mobile支持
TestProject对IOS和Android模拟器以及真机都有很好的支持
创建一个Mobile的测试
可以检测到真机和本地的模拟器
TestProject会自动在移动设备上安装自己的客户端,从而驱动测试。
Mobile上的元素定位也比较方便。
4、创建测试任务
通过在平台创建测试计划的形式来执行测试任务。
支持在各类主流浏览器上执行,包括Headless模式。
支持定时任务、邮件通知等常见功能。
当然你也完全可以使用第三方平台将自动化测试的执行也交给服务器去做。例如:BrowserStack等。
5、扩展
Community提供了丰富的插件支持,如:Moneky、RESTful API Client等等。
值得探索一番。
最后
TestProject提供了一种形式,让我们有可能摆脱重复的Coding,专注于测试本身。
然而我们探索的目的绝不仅是学会使用工具,
了解工具实现的原理和设计的思想,才是最值得思考的地方。