日常接口自动化测试过程中,我们需要筛选部分测试用例来执行,也需要并发测试和分布式执行测试来提升测试执行效率,在这篇文章里,我们一起来看看。
并发测试和分布式测试
在日常的接口自动化测试过程中,需要并发执行测试用例,以提高测试效率。
有时候也需要引入分布式测试,以便在多台机器上同时运行测试用例,也能更好的提升测试效率。
pytest-xdist
是 Pytest 的一个插件,能提供了一些对应的功能,主要用于支持并发测试和分布式测试。
pytest-xdist
功能介绍
-
1.
并发执行测试
:
pytest -n 3 # 启动 3 个并发 worker 执行测试
-
2.
分布式测试
:
pytest --dist=loadscope
pytest --dist=each
-
3.
参数化测试和并发
:
@pytest.mark.run(processes=2)
def test_example():
pass
-
4.
分布式环境设置
:
def pytest_configure_node(node):
node.slaveinput['my_option'] = 'some value'
def pytest_configure_node(node):
node.slaveinput['my_option'] = 'some value'
-
5.
分布式测试环境销毁
:
def pytest_configure_node(node):
# 配置节点
yield
# 在节点上运行测试后执行清理
print("Cleaning up after test run on node %s" % node.gateway.id)
这些是
pytest-xdist
提供的一些功能,可以帮助您更有效地执行并发测试和分布式测试,以加速测试执行并提高效率。确保在使用前查阅
pytest-xdist
的文档以获取更详细的信息和用法示例。
安装
pytest-xdist
依赖
pip install pytest-xdist
并发运行测试用例示例
并发 3 个 worker 执行测试用例
分别运行以下命令,查看测试用例的执行时长
pytest -n 3
pytest
串行执行耗时 9.81s
,而
并发执行耗时 1.63s
,可以看到并发执行测试用例可以大大提高测试效率。
并发 3 个 worker 执行测试用例,并且每个 worker 都会打印测试用例的进度
pytest -n 3 -v
测试结果中会打印测试进度,可以更好的了解测试用例的执行情况。
分布式测试示例
分布式测试,每个节点运行一组测试
pytest --dist=each
分布式测试可以更快地完成测试运行。
分布式测试,每个节点运行一组测试,并且每个 worker 都会打印测试用例的进度
pytest --dist=each -v
sMlawH
测试结果中会打印测试进度,可以更好的了解测试用例的执行情况。
分布式测试,每个节点运行一组测试,并且每个 worker 都会打印测试用例的进度,同时打印测试日志的输出
pytest --dist=each -v --capture=no
测试结果中会打印测试日志的输出,可以更好的了解测试用例的执行情况。
筛选用例执行
在日常的接口测试过程中,我们需要根据实际情况来选择性地执行测试用例,以提高测试效率。
一般我们使用 allure 测试报告的时候,可以使用 Allure 标签特性来进行筛选对应标签的的用例来执行测试,但 Pytest 框架不直接支持运行基于 Allure 标签的测试。所以可以使用 Pytest 标记来实现这一点。
Pytest 提供
marks
标记功能可以用来标记不同类型的测试用例,然后进行筛选对应类型的测试用例进行执行。
大致流程为你可以用自定义标记(如 Regression/Smoke)来标记测试,然后使用 pytest 的 -m 选项只运行这些测试。
定义 Pytest 标记
编辑 pytest.ini 文件,添加以下内容:自定义标记的类型
-
• Regression:标记为回归测试的用例
-
• Smoke:标记为冒烟测试的用例
markers =
Regression: marks tests as Regression
Smoke: marks tests as Smoke
标记用例
操作步骤为:
-
• 引入 pytest
-
• 使用
@pytest.mark
标记测试用例
为做区分,这里新建测试用例文件,文件名为 test_demo_filter.py
import pytest
import requests
import json
class TestPytestMultiEnvDemo:
@pytest.mark.Regression # mark the test case as regression
def test_get_demo_filter(self, env_config, env_request_data, env_response_data):
host = env_config["host"]
get_api = env_config["getAPI"]
get_api_response_data = env_response_data["getAPI"]
# send request
response = requests.get(host+get_api)
# assert
assert response.status_code == 200
assert response.json() == get_api_response_data
@pytest.mark.Smoke # mark the test case as smoke
def test_post_demo_filter(self, env_config, env_request_data, env_response_data):
host = env_config["host"]
post_api = env_config["postAPI"]
post_api_request_data = env_request_data["postAPI"]
print("make the request")
post_api_response_data = env_response_data["postAPI"]
# Your test code here
response = requests.post(host + post_api, json=post_api_request_data)
print("verify the response status code")
assert response.status_code == 201
print("verify the response data")
assert response.json() == post_api_response_data
筛选测试用例执行
pytest -m Regression
这条命令告诉 pytest 只运行标有 Regression 的测试。
d8dMGa
pytest -m Smoke
这条命令告诉 pytest 只运行标有 Smoke 的测试。
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,
请及时加入群: 786229024
,里面有各种测试开发资料和技术可以一起交流哦。
最后:
下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取
【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。