5.案例回顧及編寫測試用例
阿新 • • 發佈:2021-08-07
案例回顧及編寫測試用例
使用新測試庫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'])
重新執行用例,可以執行成功