unittest模块
unittest介绍
unittest 单元测试 测试框架;单元测试:最小的测试单元,unittest是python自带的一套测试框架
unittest 测试框架的介绍:(框架设计灵感来源于java语言的测试框架)
unittest框架的作用:管理和组织测试用例,生成测试报告,便于后去的维护
常用的一些单元测试框架: unittest pytest android测试框架、Java Junit测试框架
unittest 框架
注意事项
(1)unittest 框架 只有一个类开始和类结束
(2)unittest框架 只运行以test开头的用例
(3)test用例运行的顺序,以ascii码为准:0-9 A-Z a-z
(4)每条用例都要用到方法开始,方法结束
(5)在我们使用中,有时不写类的开始和结束
自动化用例编写注意点
1、一个自动化脚本就是一个完整的场景:从开始—执行过程—结束(退出)
2、一个自动化脚本只验证一个功能点,不要试图把所有功能都写在一个用例中
3、编写自动化用例尽量是正常场景,避免异常场景(尽量不填验证登录)
4、自动化用例尽量保证独立性,不要造成一个用例与多个用例产出数据上或
业务上的关联,这会给后期带来用例维护上的不便
5、自动化用例的断言,只针对需要断言的地方进行断言(重要环节),没必要在每个
个环境进行断言验证
unitest使用例子
基本格式
import unittest # 导入unittest框架
class Test(unittest.TestCase): # 定义一个类,继承unittest中的TestCase
@classmethod
def setUpClass(cls) -> None: # 类的开始
print('类开始')
@classmethod
def tearDownClass(cls) -> None: # 类的结束
print('类结束')
def setUp(self) -> None: # 方法的开始:写的内容:比如driver对象,打开浏览器 测试用例前的操作
print('方法开始')
def tearDown(self) -> None: # 方法的结束:负责释放资源,比如关闭浏览器,测试用例后的执行
print('方法结束')
def test001(self): # 执行test开头的测试用例,以及根据排序来执行
print(111)
def test002(self):
print(222)
def hz(self): # 非test开头的用例,在unittest框架里不执行
print('杭州')
if __name__ == '__main__':
unittest.main()
用例详情
在下边的第二种第四种执行用例的方法中,需要pycharm的run/debug configurations 中点击左上角加号python对象在script path填上文件的绝对路径,点击ok 运行即可
import unittest
from selenium import webdriver
from time import sleep, strftime
from ui_zidonghua.HTMLTestRunner3_New import HTMLTestRunner # 导入报告模板
class TestBaiDu(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Chrome()
self.driver.get('http://www.baidu.com')
self.driver.implicitly_wait(6)
def tearDown(self) -> None:
sleep(3)
self.driver.close()
def test001(self):
self.driver.find_element_by_id('kw').send_keys('selenium')
self.driver.find_element_by_id('su').click()
def test002(self):
self.driver.find_element_by_id('kw').send_keys('python')
self.driver.find_element_by_id('su').click()
def test003(self):
self.driver.find_element_by_id('kw').send_keys('html')
self.driver.find_element_by_id('su').click()
def hz(self):
self.driver.find_element_by_id('kw').send_keys('dcs')
self.driver.find_element_by_id('su').click()
def all_case(): # 定义一个函数
suit = unittest.TestSuite() # 创建一个套件或者容器,用来装所有的用例对象
suit.addTest(TestBaiDu('test001')) # adTest添加用例
# suit.addTests([TestBaiDu('test001'), TestBaiDu('test002')]) # adTests添加多个用例
return suit
if __name__ == '__main__':
# unittest.main() # 第一种执行框架中的全部用例
# runner = unittest.TextTestRunner()
# runner.run(all_case()) # 第二种执行部分用例
# 第三种方法
# path = r'F:\flask_projects\dcs\ui_zidonghua'
# ss = unittest.defaultTestLoader.discover(start_dir=path,pattern="test*.py")
# runner = unittest.TextTestRunner()
# runner.run(ss)
# 第四种可以直接生成报告
path = r'F:\flask_projects\dcs\ui_zidonghua'
bgpath = r'F:\flask_projects\dcs\ui_zidonghua'
ss = unittest.defaultTestLoader.discover(start_dir=path, pattern="test*.py")
now = strftime('%Y-%m-%d-%H-%M-%S')
filename = bgpath + '\\' + str(now) + '_ui.html'
f = open(filename, 'wb')
runner = HTMLTestRunner(stream=f,title='ui自动化测试报告', description='用例执行情况', tester='hz')
runner.run(ss)

浙公网安备 33010602011771号