[Pytest][Part 5]单条测试和用例集测试

目录

[pytest 运行方式](#pytest 运行方式)

命令行运行

主函数运行

通过pytest.ini来运行

封装主函数运行方式


这里完成需求3:可以运行单条test case,也可以根据case list 来运行list里面的case

这一部分比较简单,将pytest的运行命令封装一下就可以完成需求。

pytest 运行方式

pytest有3中运行方式:

1.命令行运行

2.主函数运行

3.配置文件pytest.ini运行

命令行运行

在cmd窗口运行命令如下,分三种运行方式

bash 复制代码
#运行当前目录下的所有测试case
pytest -vs

#执行测试模块运行,运行test_sample.py下的所有case
pytest -vs test_sample.py

#执行指定case
pytest -vs test_cases/test_sample.py::TestSample::test_addition

主函数运行

python的运行一般会有一个主函数来作为整个脚本的入口函数,pytest也有这样的一个入口函数,接收一个数组作为main函数的参数,也有三种运行方式

python 复制代码
#运行执行测试case

if __name__ == "__main__":
    pytest.main(['-vs','test_cases/test_sample.py::TestSample::test_addition'])


#执行当前目录下的所有case

if __name__ == "__main__":
    pytest.main(['-vs'])


#执行指定模块的case

if __name__ == "__main__":
    pytest.main(['-vs','test_cases/test_sample.py'])

通过pytest.ini来运行

如果pytest.ini文件存在,那么pytest就会根据pytest.ini中的配置来运行测试

pytest.ini是pytest的核心配置文件,一般放在项目的根目录下。

addopts = -vs #测试参数

testpaths = ./test_cases #测试目录

python_files = test_*.py #执行所有以test_开头的文件

python_classes = Test* #执行所有以Test开头的类

python_functions = test* #执行所有以test开头的case

上面是pytest默认的配置规则,当然也可以修改上面的配置文件来改变pytest默认的执行规则,比如可以修改成如下:

addopts = -vs -n 2 #测试参数,多个参数需要用空格隔开

testpaths = ./test_cases #测试目录

python_files = aaa_*.py #执行所有以aaa_ 开头的文件

python_classes = Testbbb* #执行所有以Testbbb 开头的类

python_functions = testccc* #执行所有以testccc开头的case

封装主函数运行方式

这里采用主函数的方式来运行测试脚本。

在上一篇文章中,我们把从命令行或者是配置文件中读取的测试配置都填充填ConfigTest中了,因此,现在我们要做的就是:

  1. 从ConfigTest中读取到测试信息

  2. 生成pytest的测试参数并传递给main()

python 复制代码
def run_pytest(config):
    """执行测试并生成报告"""

    # 默认参数
    pytest_args = ["-sv"]

    if config.single_test:
        pytest_args.extend([config.case_list])
    elif config.list_test:
        case_list = functionApi.read_case_from_list_file()
        pytest_args.extend(case_list)

    # 设置重复次数
    if int(config.repeat) > 1:
        pytest_args.extend(["--count", str(config.repeat)])

    # 执行测试
    exit_code = pytest.main(pytest_args)
    return exit_code

其中当运行测试集的时候,调用了read_case_from_list_file()来从测试集中读取到需要运行的case

python 复制代码
    def read_case_from_list_file(self):
        test_list = "test_list.txt"
        # get path of test_list.txt
        file_path = os.path.join(os.getcwd(), test_list)
        # print("os.path.abspath:", os.path.abspath(__file__))  #获取当前文件的绝对路径
        # print("os.getcwd()", os.getcwd())                     #获取调用该函数的项目路径
        # print("file path :", file_path)
        case_list = []
        try:
            with open(file_path) as file_handle:
                lines = file_handle.readlines()
                for line in lines:
                    case_list.append(line.strip())
        except FileNotFoundError as e:
            logger.error(f"file not found:{e}")
        except PermissionError as e:
            logger.error(f"No permission to read the file:{e}")
        except Exception as e:
            logger.error(f"file not found: {e}")
        return case_list
相关推荐
旦莫16 小时前
AI驱动的纯视觉自动化测试:知识库里应该积累什么知识内容
人工智能·python·测试开发·pytest·ai测试
夏至春来-美美1 天前
python 使用pytest的ini配置
开发语言·python·pytest
Be reborn1 天前
CSV + YAML 怎么描述测试:H5 SDK 自动化框架的数据模型设计
运维·自动化·pytest
Be reborn2 天前
用 Playwright 做自动化测试:如何验证网络请求并做断言
网络·python·自动化·pytest
lifewange4 天前
pytest 找不到文件?直接在 pytest.ini 配置根目录 + 路径(最简单方案)
开发语言·python·pytest
老神在在0014 天前
保姆级教程:Pytest + Allure 接口自动化测试从 0 到 1 完整指南(含环境搭建、用例编写、报告生成、报错排坑全流程)
pycharm·pytest·测试
清水白石0084 天前
从手写初始化到 pytest fixture:让 Python 测试既干净、可复用,又能驾驭异步并发
开发语言·python·pytest
测试员周周4 天前
【AI测试数据及模型质量2】换一批测试数据,模型得分差20%——AI评测翻车的根子,90%在数据质量
人工智能·python·ui·单元测试·测试用例·集成测试·pytest
nbwenren12 天前
2026实测:Gemini 3.1 Pro 从需求文档到 pytest 测试用例一条龙教程
测试用例·pytest
我的xiaodoujiao13 天前
API 接口自动化测试详细图文教程学习系列16--项目实战演练3
python·学习·测试工具·pytest