书籍来源:房荔枝 梁丽丽《框架与自动化测试应用》

一边学习一边整理老师的课程内容及实验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:框架进阶自学系列 | 汇总_热爱编程的通信人的博客-CSDN博客

实现参数化有3种方式:

分别在3.8节和4.2节介绍了前面两种方式。本节简单介绍自定义参数化方案。

s在测试用例参数化收集前调用此钩子函数,根据测试配置或定义测试函数的类或模块中指定的参数值生成测试用例,可以使用此钩子实现自定义参数化方案或扩展。

有时可能要实现自己的参数化方案或实现某种动态性来确定的参数或范围,因此,可以使用s在收集测试函数时调用的钩子。通过传入的对象,可以检查请求的测试上下文,最重要的一点是,可以调用.()引起参数化。

我们先看一看源码中是怎么使用这种方法的。

源码如下:

pytest_pytest怎么读_pytest框架

首先,它检查了的拼写错误,如果不小心将写成了[“”,””,””]中的一个,会返回一个异常,并提示正确的单词,然后循环遍历所有的的标记,并调用.方法。

例如,假设我们要运行一个测试,并接收通过新的命令行选项设置的字符串输入。我们首先需要编写一个接收函数参数的简单测试。

我们检查给定的是否只由字母组成,但是我们并没有为其打上标记,所以被认为是一个。

代码如下:

def test_valid_string(stringinput):
    assert stringinput.isalpha()

现在,我们期望把当成一个普通的参数,并且从命令行赋值。

首先,我们定义一个命令行选项。

代码如下:

def test_valid_string(stringinput):
    assert stringinput.isalpha()

然后,我们通过s方法,将的行为由改成。

代码如下:

def pytest_addoption(parser):
    parser.addoption(
        "--stringinput",
        action="append",
        default=[],
        help="list of stringinputs to pass to test functions",
    )
    
def pytest_generate_tests(metafunc):
    if "stringinput" in metafunc.fixturenames:
        metafunc.parametrize("stringinput", metafunc.config.getoption("stringinput"))

最后,我们可以通过–命令行选项为参数赋值。

代码如下:

PS D:SynologyDriveCodeLearningWINpytest-booksrcchapter-4> pytest -q --stringinput='hello' --stringinput='world' .test_strings.py
..                                                                                                                                                                                                                               [100%]
2 passed in 0.03s
PS D:SynologyDriveCodeLearningWINpytest-booksrcchapter-4> 

如果我们不加–选项,相当于的中的参数没有接收到任何的实参,那么测试用例的结果将会被置为。

PS D:SynologyDriveCodeLearningWINpytest-booksrcchapter-4> pytest -q .test_strings.py
s                                                                                                                                                                                                                                [100%]
1 skipped in 0.00s
PS D:SynologyDriveCodeLearningWINpytest-booksrcchapter-4> 

不管是.方法还是@.mark.标记,它们的参数()不能是重复的,否则会产生一个错误:: ''。

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666