接口测试框架与数据驱动

参数化

    @pytest.mark.parametrize("name_old, name_new", [
        ("wangmu", 'haha'),
        ("zhangsan", 'seveniruby')
    ])
    def test_all(self, name_old, name_new):

        data = self.tag.get()
        for name in [name_old, name_new]:
            tag_id = self.tag.jsonpath(data, f'$..tag[?(@.name=="{name}")].id')
            if tag_id:
                print(name)
                self.tag.delete(tag_id[0])

        assert self.tag.add(name_old)['errcode'] == 0
        tag_id = self.tag.jsonpath(self.tag.get(), f'$..tag[?(@.name=="{name_old}")].id')[0]
        assert self.tag.update(tag_id, name_new)['errcode'] == 0

yaml数据

测试数据的数据驱动

class TestTag:
    tag = Tag()
    test_data = tag.load('test_tag.data.yaml')

    @classmethod
    def setup_class(cls):
        pass

    def setup(self):
        pass

    @pytest.mark.parametrize("name_old, name_new", test_data)

数据驱动

    @classmethod
    def template(cls, path, data, sub=None):
        with open(path, 'r') as f:
            if sub is None:
                return yaml.load(Template(f.read()).substitute(data))
            else:
                return yaml.load(
                    Template(
                        yaml.dump(
                            yaml.load(f)[sub])).substitute(data))

第一个断言执行了,断言后面的代码还会运行吗

tag不是继承了BaseApi了么,为啥还要再导入BaseApi,直接用tag不行么

我之前的case就直接放到BaseApi里面,没用静态,可以直接调

如果yaml文件里边有多个接口的数据,怎么让不同的接口调用对应的参数

上次的作业里,我有把tagid从之前的get里面去取,可以参考看看

add/get都简单,难的就是update和del,这俩需要从get里去取tagid,写这个真的是搞死了···最终没办法用正则替换了下···

tagid是动态的

如果把add,delete,get的yaml文件,写到一个yaml文件中格式应该是什么样的?如何调用?

其实对数据清理这一块还比较模糊,现在工作也在做接口,数据清理一直没做好,不知道该怎么去设计,今天听的也有点模糊

mustache方法的写法能简单写个例子吗

前两次作业我也用了yaml进行steps方式的封装,发现这样去写的话,用例有报错的话,下面的步骤就不会执行,我就加了try except去跳过,但是用例多的时候,去排查问题好麻烦···有没好方法

上代码看看,怀疑你加错地方了

https://github.com/q838732947/devtest/blob/master/httpapi/workweixin/POcase/api/BaseApi.py

关闭