1. 程式人生 > 其它 >5.案例回顧及編寫測試用例

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#檢查列表中包含剛剛建立的部門資訊

執行成功,但是發現抓包工具有紅色的報錯


發現是跟以前的報錯一樣,提示總公司不能刪除
但是我們又不能在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

這就要重寫父類的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#檢查列表中包含剛剛建立的部門資訊

組織專案結構

根據功能點:每個功能,如果都需要用到相同的資料環境,那就需要每個功能點裡面構造,不能共享資料環境
根據資料環境:相同資料環境下實現不同功能的測試用例,可以做到資料環境共享,不用重複創造資料環境

現在需要建立一個管理員登入的資料環境,然後在這個環境裡面新建一個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'])

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