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'])

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

posted @ 2021-08-07 09:21  幸福一家  阅读(154)  评论(0编辑  收藏  举报