本節主要系統介紹一下Pytest在自動化測試中常用的一些用法,自己編寫了一個自動化測試腳本,附在末尾
一、斷言
學過unittest的同學知道,也是有斷言方法的,但是pytest與其有點不同,更為簡單。
判斷a是否與b相等 assert a==b
判斷a是否存在b中 assert a in b
判斷a與b不相等 assert a != b
二、指定順序執行用例
測試用例的執行順序是按照字母順序執行的,如果想指定其執行順序,可以使用order用法。
首先需要安裝pytest-ordering庫,然后在測試用例上面調用pytest.mark.run(order=1),數字字母越小越先執行。
@pytest.mark.run(order=1)
def test_login_account_ok(self):
self.driver.send_account('account')
self.driver.send_password('pwd')
self.driver.btn_click()
time.sleep(1)
assert self.driver.get_current_url() == 'http://ygc.com'
三、參數化
在編寫測試用例時候,只有某一個值進行改變,可以將此值進行參數化,有多少個值執行多少次。
如 百度搜索:selenium,自動化,123,空置
@pytest.mark.parametrize('search_word',['selenium','自動化','123',' ']) def test_baidu(self,search_word): driver.find_element_by_id('kw').clear() driver.find_element_by_id('kw').send_keys(search_word) driver.find_element_by_id('su').click()
備注:以上測試用例會執行4次,每次百度輸入框輸入的值分別為selenium,自動化,123,空;測試用例的參數必須要與parameterize里面的參數一致
如果是需要傳入多個參數,比如登錄的用戶名,密碼 可以寫為:
@pytest.mark.parametrize('account,pwd',[('admin','123456'),('admin','111111'),('admin','')]) def test_login(self,account,pwd): driver.find_element_by_id('account').clear() driver.find_element_by_id('account').send_keys(account) driver.find_element_by_id('pwd').clear() driver.find_element_by_id('pwd').send_keys(pwd) driver.find_element_by_id('su').click()
四、不執行某個測試用例
如果想要某個測試用例不執行,可以加上@pytest.mark.skip,這樣某個測試用例就會跳過執行。
五、測試用例前后執行
在執行測試用例之前的預置條件以及執行完測試用例的后置條件,比如,在測試網站時候,通常需要先進行登錄,測試完之后退出登錄,關閉瀏覽器。
setup/teardown
def setup(def):
print("before testing")
def teardown(def):
print("Finish testing")
每執行一個測試用例,就會執行一次setup,teardown.比如有3個測試用例,那么對應的setup,teardown也會執行三遍。
如果只想執行一遍,那么可以使用 setup_class,teardown_class,這樣只會在測試用例之前執行一次setup_class,所有測試用例執行完成后執行一次teardown_class