python pytest 总结与答疑

课前准备

  • 看完本章节所有课程内容
  • 完成作业,优先回答和作业相关的问题
  • 相关问题在评论区回复

上课内容

  • 梳理知识点
  • 讲解作业
  • 答疑

知识点梳理

链接: 百度网盘 请输入提取码 提取码: 6nnx

本章演示代码

https://gitlab.stuq.ceshiren.com/lg/lg9/hogwartslg9

课后调查表

作业

  • 课后作业
    • 1、补全计算器(加法 除法)的测试用例
    • 2、使用参数化完成测试用例的自动生成
    • 3、在调用测试方法之前打印【开始计算】,在调用测试方法之后打印【计算结束】
  • 注意:
    • 使用等价类,边界值,因果图等设计测试用例
    • 测试用例中添加断言,验证结果
    • 灵活使用 setup(), teardown() , setup_class(), teardown_class()

设计测试用例

加法

  • 正常的情况

    • 整数
    • 为0
    • 大数
    • 负数
  • 小数的情况

  • 异常的情况

    • 字符型

除法

  • 正常的情况
    • 整数
    • 为0
    • 大数
    • 负数
  • 小数情况
  • 异常情况
    • 除数为0
    • 类型错误

优秀作业

点评: 知识点应用比较灵活,用例设计 考虑的比较全面

https://gitee.com/sailyang00/ceshiren/blob/master/class2/moudle2/ceshiren_homework_moudle2/

点评: 想法比较多,添加了日志,自动生成ids属性,用例考虑的也比较全面,需要注意的是目录结构需要划分清晰一些。

1、计算器测试类中,把加法、除法计算都写在一起,获取yaml文件时,
image

如下:
with open("./datas/test_calculator.yml") as f:
# 实例化,获取yaml文件中add数据
datas_add = yaml.safe_load(f)[‘add’]
# 获取yaml文件中add:datas数据
add_datas = datas_add[‘datas’]
# 打印add:datas数据
print(add_datas)
# 获取yaml文件中add:myid数据
add_myid = datas_add[‘myid’]
# 打印add:myid数据
print(add_myid)
# 实例化,获取yaml文件中div数据
datas_div = yaml.safe_load(f)[‘div’]
# 获取yaml文件中div:datas数据
div_datas = datas_div[‘datas’]
# 打印div:datas数据
print(div_datas)
# 获取yaml文件中div:myid数据
div_myid = datas_div[‘myid’]
# 打印div:myid数据
print(div_myid)
运行报错:


2、计算器计算除法时,除数为0,怎样处理可以使用例通过

@pytest.mark.parametrize()中为什么访问不到conftest文件中创建的fixtrue

同学最好把代码上传到github上,然后贴一下代码地址哈!

可以试着自己点进源码看一下(ctrl + 鼠标左键),参数化的源码如下:

    class _ParametrizeMarkDecorator(MarkDecorator):
        def __call__(  # type: ignore[override]
            self,
            argnames: Union[str, List[str], Tuple[str, ...]],
            argvalues: Iterable[Union[ParameterSet, Sequence[object], object]],
            *,
            indirect: Union[bool, Sequence[str]] = ...,
            ids: Optional[
                Union[
                    Iterable[Union[None, str, float, int, bool]],
                    Callable[[Any], Optional[object]],
                ]
            ] = ...,
            scope: Optional[_Scope] = ...,
        ) -> MarkDecorator:
            ...

可以看到里面需要五个参数,里面没有允许直接添加 fixture ,但里面有一个参数 indirect,这个值设置为True,可以将argnames 的值解析为函数来执行。也就是说indirect=True 时,可以argnames 中的参数为fixture。

我也遇到了这个问题,yaml中两个字典套字典就不可以,只有加法的数据的时候就可以

按照课上老师讲的读取方式,老师直播课上讲作业的时候 就是两个字典嵌套的格式 。

allure生成的html的文件,在chrom打开会404,可以用Microsoft Edge浏览器正常打开,有什么方法可以解决么?