python pytest 测试实战(二)-- 作业

课后作业

课后作业1

1、使用参数化数据驱动,完成加减乘除测试用例的自动生成
2、修改测试用例为check_开头,修改测试用例的执行规则,执行所有check_开头和test_开头的测试用例

课后作业2

控制测试用例顺序按照【加-减-乘-除】这个顺序执行,
减法依赖加法, 除法依赖乘法

课后作业3

注册一个命令行参数env,env默认值是test,表示测试环境,另外还有两个值 (dev,st)不同的环境读取不同的数据。

理解

测试数据的数据驱动
测试步骤的数据驱动
思考应用场景

课后作业

pytest实战 第二次作业

作业

理解步骤驱动法:动作与数据分离,控制动作的步骤。
通过老师直播中的例子进行说明:

  1. 把测试步骤的关键字放在yml文件中,

  2. 通过step函数把步骤关键字与实际的测试动作(步骤函数)关联起来,ps:那么只要控制yml文件中的关键字顺序,也就控制了step中的每个测试动作的顺序,但此时step中并没有实际的测试数据,测试数据在Test_*方法中。

  3. 通过在Test_*方法中调用step函数,就可以把动作与数据结合起来。

  4. 可以相像成矩阵,数据与动作是两个维度

应用场景:
每个动作使用的数据个数,类型,数据顺序都相同

  1. 可以运用到不同权限用户的同一组操作动作的测试。不同权限用户,用户有各种属性构成一组数据,构造多个不同权限的用户,同一组操作(比如某增删改查),不同的结果(结果与用户数据放一起做断言)
  2. 不同状态的工单,向后走同一个流程,工单为数据维度,流程为动作维度
1 Like

作业地址:https://github.com/tiannabian/hogwarts.git 注释为 second commit

int1:
-5
-4
-20
float:
-2.5
-1.0
-2.5
int2: [-1, 0, 0]
int3: [-1, 2, -2]

请问老师,上面是我的yml文件内容,读取value的时候类型和值如下,我是哪里弄错了
作业就差这个了…
<class ‘dict_values’>
dict_values([’-5 -4 -20’, ‘-2.5 -1.0 -2.5’, [-1, 0, 0], [-1, 2, -2]])

yaml 的格式参照:YAML 入门教程 | 菜鸟教程

上面的格式,参数下面:

languages:
  - Ruby
  - Perl
  - Python 

1、要有缩进
2、列表使用- 表示, - 与字符之间要有空格

总结的很好,赞!应用场景后面我们在讲web,app,接口框架封装的时候也会用到。一般step 封装在编写用例的时候用的比较少,主要是框架封装自动生成用例的情况可以使用这种方式。

pytest测试实战(二)作业

思考

  • 测试步骤的数据驱动,减少了代码维护及调试工作量;如程序业务逻辑顺序改变,仅改变yaml数据调整顺序就可以了,不再需要调试代码或仅仅简单修改代码就可以完成测试.
  • 测试数据的数据驱动,仅本次实战练习的计算器测试,数据驱动自动生成的测试用例,比我自己想到的还要多,还要全面.非常适合做不同数据类型组合的输入输出的校验工作.
  • 应用场景:最常见的可能就是登录校验操作了,此外我还想到一种场景就是建立不同的用户操作行为,把不同的操作行为分别列成不同的数据条目,通过数据自动生成测试用例把不同的操作行为组合进行测试.实现对软件尽可能多的进行操作逻辑测试,从而发现问题.可以节省大量的重复工作时间,提升工作效率.

课后作业

理解

测试数据的数据驱动&测试步骤的数据驱动:
测试数据和步骤的数据驱动其实是一样的,比如在web自动化的设计中,可以把动作都封装成方法,然后调用这些方法,传递或调用步骤数据,然后在步骤中传递测试数据,从而完成case。
这样做,可以增加代码的复用性且维护成本低一些

pytest课后作业二

思考

  • 测试数据驱动可以自动生成测试用例,减少了代码量;,还可以自己写hook函数重写参数化fixture,减少了装饰器的使用
  • 测试步骤的数据驱动,由于没有实际经验,仅就计算器的测试代码没看出来太大优势,测试步骤还是会写在读取步骤的数据文件中,代码量并没有减少
  • 典型数据驱动应用场景就是登陆了,还要搜索功能

存在的疑惑
对于动态生成用例,用例依赖是判断被依赖用例最后一次的成功或失败决定依赖用例是执行还是跳过吗

https://github.com/xwl65/untitled12

hook函数的优势,也许你如下写,会有一些优势,我只是个人解答,以老师的为准
def test_mult(self, “param”):
steps(“param”)
这是加了之后的。
@pytest.mark.parametrize(‘a,b,result’, [

        (3,4,0.75),
        (1,2,0.5),
        (1,1,1)], )

def test_subtract4(self, a, b, result):
    result = a/b
    assert result == self.cal.div(a, b)

补作业,metafunc没看懂
https://github.com/LimnN/Hogwarts/blob/master/tests/check_calc.py

https://github.com/zaezjf/Hog_Homework03_pytest

作业

课后作业
https://github.com/zengxuejie0710/New_2020-0710/tree/master/hogwarts/Homework_0712
思考
这两个测试驱动其实都可以减少代码的冗余,方便维护,测试数据的数据驱动自动生成测试用例更加灵活,测试中的场景其实很多都可以用到,例如,登录,切换出发站和终点站(自己公司最近用到的)。测试步骤的数据驱动,除了切换测试环境,还可以设置各种不同的用户权限。其他方面的用法可能需要后期实战中才能逐步理解。

第二次课后作业

除法的除数为0的时候,不知道怎么在data文件的yaml文件里写预期

不知道为啥就是不能忽略文件上传 :sweat_smile:
https://github.com/BaoziShen/Hogwarts0