本节主要系统介绍一下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