• 5.案例回顾及编写测试用例


    案例回顾及编写测试用例

    使用新测试库BaseAPI

    删除原先的测试库
    organizapi.py,使用新的测试库
    修改测试用例

    from pylib.webapi.bussiness import OrganizAPI
    import pytest
    from conf.env import g_pwd,g_email
    from pylib.webapi.common import login
    
    
    @pytest.fixture()
    def before_tc000001():
        cookies=login(g_email,g_pwd)
        org_api=OrganizAPI(cookies)
        org_api.delete_all()
        return org_api
    
    def test_tc000001(before_tc000001):
        org_api=before_tc000001
        #step1
        org=org_api.add(name='研发部')
        #step2
        orgs=org_api.list_all()
        assert org in orgs#检查列表中包含刚刚创建的部门信息
    

    执行成功,但是发现抓包工具有红色的报错

    图 49
    发现是跟以前的报错一样,提示总公司不能删除
    但是我们又不能在BaseAPI中过滤,因为其他接口是可以删除所有的
    那怎么办呢?我们只能取子类中操作,重写父类的方法,然后加上过滤条件

    重写父类的方法

    #部门API
    class OrganizAPI(BaseAPI):
        #删除所有
        def delete_all(self):
            lists=self.list_all()[1:]
            for list in lists:
                self.delete(list['_id'])
    

    接着分析又发现,add和edit方法,parentid没有动态获取,只用到了模板中的id
    图 50

    这就要重写父类的add和edit方法
    判断key是否存在,要用get方法,如果以[]形式,如果不存在,会报错key不存在

        #增加
        def add(self,**kwargs):
            #如果传了parent_id,就无法起作用,需要进行判断,如果没有传,才使用总公司的id
            if not kwargs.get("parent",None):
                parent_id=self.list_all()[0]['_id']#默认为总公司的id
                kwargs['parent']=parent_id
            #复用父类的方法
            super().add(**kwargs)
        #修改
        def edit(self,_id,**kwargs):
            #如果传了parent_id,就无法起作用,需要进行判断,如果没有传,才使用总公司的id
            if not kwargs.get("parent",None):
                parent_id=self.list_all()[0]['_id']#默认为总公司的id
                kwargs['parent']=parent_id
            #复用父类的方法
            super().edit(**kwargs)
    
    

    用例优化--清除操作

    @pytest.fixture()
    def before_tc000001():
        cookies=login(g_email,g_pwd)
        org_api=OrganizAPI(cookies)
        org_api.delete_all()
        yield org_api   #yield后面没有代码时类似return,相当于运行中的断点,python中的协程就是用这个关键字,还会用在这个编程中
        #在python中,yield之前是初始化操作,之后是清除操作
        org_api.delete(org['_id'])
    
    def test_tc000001(before_tc000001):
        global org
        org_api=before_tc000001
        #step1
        org=org_api.add(name='研发部')
        #step2
        orgs=org_api.list_all()
        assert org in orgs#检查列表中包含刚刚创建的部门信息
    

    组织项目结构

    图 4

    根据功能点:每个功能,如果都需要用到相同的数据环境,那就需要每个功能点里面构造,不能共享数据环境
    根据数据环境:相同数据环境下实现不同功能的测试用例,可以做到数据环境共享,不用重复创造数据环境

    现在需要创建一个管理员登录的数据环境,然后在这个环境里面新建一个conftest文件,写登录的方法

    同时在这里面编写没有分部环境的方法

    from conf.env import g_email, g_pwd
    from pylib.webapi.common import login
    import pytest
    from pylib.webapi.bussiness import OrganizAPI
    
    @pytest.fixture(scope='session')
    def init_admin():
        cookies = login(g_email, g_pwd)
        return cookies
    
    @pytest.fixture(scope='session')
    def empty_organization(init_admin):
        org_api=OrganizAPI(init_admin)
        org_api.delete_all()
        return org_api
    

    接着优化测试用例
    test_organizapi.py

    @pytest.fixture()
    def before_tc000001(empty_organization):
        org_api=empty_organization
        yield org_api   #yield后面没有代码时类似return,相当于运行中的断点,python中的协程就是用这个关键字,还会用在这个编程中
        #在python中,yield之前是初始化操作,之后是清除操作
        org_api.delete(org['_id'])
    
    

    重新执行用例,可以执行成功

  • 相关阅读:
    袁绍的刁难(recruitment.pas/cpp)
    数列分块入门 5 总结
    【五校联考3day1】旅游
    【五校联考3day1】食物
    jzoj 1274. 游历的路线(lines.pas/cpp)
    thinkphp框架开发功能要求
    java中 Bouncycastal库的使用
    Spring+Quartz实现定时任务的配置方法
    java缓存的使用
    Java注解教程:自定义注解示例,利用反射进行解析
  • 原文地址:https://www.cnblogs.com/xiehuangzhijia/p/15111041.html
Copyright © 2020-2023  润新知