测试框架有unittest、pytest
pytest
使用pytest,方法名必须要以test开头
一个方法是一个用例,方法中添加断言判断执行结果是否等于预期,断言用assert。如下判断当前页面的url是否等于百度首页的地址:
assert driver.current_url =="https://www.baidu.com/"
缺点:
代码耦合性高,用例难以维护
unittest
python自带的单元测试框架,不用安装直接导入使用,可以进行用例管理,把功能相近的用例写到一个类中,并可以生成测试报告。
import unittest
按住ctrl并点击unittest可以查看怎么使用
unittest中的类需要调用unittest下的TestCase,类中包含的测试用例/方法名称也要以test开头,并且用例的参数项需要包含self,如下,定义了一个名为TestCase的类,该类包含一个名为test_login的用例。
class TestCase(unittest.TestCase):
# 执行每个用例前先执行setUp
def setUp(self):
self.driver = webdriver.Chrome()
# 每个用例执行完后,执行tearDown
def tearDown(self):
self.driver.quit()
# 一个测试用例
def test_login(self):
【test fixture】
执行一个测试用例进行的环境搭建和销毁是一个fixture,通过setup和teardown实现。
【testcase】
测试用例,一个完整的测试流程,包括测试前期准备,测试环境搭建-setup(选择浏览器),执行测试代码-runner,销毁记录-teardown(关闭浏览器),可以对某个具体问题进行验证。
【test suit】
测试集,多个用例集合在一起,可以将关联的用例组合成测试套件
suit的使用
# 将TestCase类中包含的测试用例添加到测试集suit中
suit = unittest.TestSuite()
suit.addTest(unittest.makeSuite(TestCase))
【test runner】
运行器,执行测试用例
# unittest的运行方法
if __name__ =='__main__':
unittest.main()
【test loader】
加载器,将testcase加载到testsuit中
【用例执行顺序】
ASCII码0-9 A-Z a-z
【常用的断言】
assertEqual(a,b):a==b
assertNotEqual(a,b):a!=b
assertTrue(x):Bool(x) is True
assertFalse(x):Bool(x) is False
assertIs(a,b):a is b
assertIsNot(a,b):a is not b
assertIsNone(x):x is None
assertIsNotNone(x):x is not None
assertIn(a,b):a in b
assertNotIn(a,b):a not in b
assertIsInstance(a,b):IsInstance(a,b)
assertNotIsInstance(a,b):NotIsInstance(a,b)
断言的使用
# 以assertEqual举例,下面的断言表示如果当前url等于"https://www.baidu.com/",就通过
self.assertEqual(self.driver.current_url, "https://www.baidu.com/")
【执行结果】
点击红框按钮,可以查看执行测试用例的路径。
测试路径根节点的Test Results显示在右侧运行结果的顶部,下图红框所示。
测试路径每一层分别代表python文件,类名,方法名,如下图
1:执行的python文件名称
2:python文件中被执行的类名
3:python文件中被执行的方法名
p.s.
运行程序的默认方式可以在file>settings>Tools>Python Integrated Tools中进行修改。如果选择pytest出现如下提示,说明没有安装pytest或pytest没有安装成功,在cmd窗口执行pip install pytest,执行完成后重启pycharm,此时再选择pytest就不会再有错误提示,点击【Apply】,再点击【ok】即可。
也可以设置默认运行程序的方式为unittest
网友评论