12.6
自动化测试用例编写
不管基于什么的测试框架,自动化测试用例的编写都需要遵守如下的规则,具体总结如下:

UnitTest测试框架
unittest是属于Python语言的单元测试框架,它的核心组件具体可以总结为如下:

测试⽤例:
测试类继承unittest模块中的TestCase类后,依据继承的这个类来设置⼀个新的测试⽤例类和测试⽅法。
测试固件:
测试固件表示⼀个测试⽤例或者多个测试以及清理⼯作所需要的设置或者准备。
测试套件:
测试套件顾名思义就是相关测试⽤例的集合。
测试运⾏:
管理和运⾏测试⽤例的对象。
测试断⾔:
对所测试的对象依据返回的实际结果与期望结果进⾏断⾔校验。
测试结果:
测试结果类管理着测试结果的输出,测试结果呈现给最终的⽤户来反馈本次测试执⾏的结果信息。
自动化测试用例要素包含:
1、前提条件 setUp()
2、测试步骤
3、结果验证
4、清理 tearDown()
一、测试固件每次均执⾏
1、每个测试用例都必须是test开头的,一般建议test_
2、每个测试用例都应该有标题
3、每个测试用例建议只写一个测试场景
4、每个测试用例必须的有结果信息,也就是断言
5、每个测试用例都是独立的,测试用例之间不会因为业务的依赖关系而关系
from selenium import webdriver
import unittest
class BaiduTest(unittest.TestCase):
def setUp(self) -> None:
self.driver=webdriver.Chrome()
self.driver.get('https://www.baidu.com')
self.driver.maximize_window()
self.driver.implicitly_wait(30)
def tearDown(self) -> None:
self.driver.quit()
def test_baidu_title(self):
'''百度测试:验证百度首页的title'''
# assert self.driver.title=='百度一下,你就知道'
self.assertEqual(self.driver.title,'百度一下,你就知道')
def test_baidu_url(self):
'''百度测试:验证百度首页的URL'''
# assert self.driver.current_url=='https://www.baidu.com/'
self.assertEqual(self.driver.current_url,'https://www.baidu.com/')
if __name__ == '__main__':
unittest.main(verbosity=2)
执⾏如上的代码后,它的顺序为:
测试固件-->测试⽤例,测试固件-->测试⽤例
test百度首页
from selenium import webdriver
import unittest
class BaiduTest(unittest.TestCase):
def setUp(self) -> None:
self.driver=webdriver.Chrome()
self.driver.get('https://www.baidu.com')
self.driver.maximize_window()
self.driver.implicitly_wait(30)
def tearDown(self) -> None:
self.driver.quit()
def test_baidu_title(self):
'''百度测试:验证百度首页的title'''
# assert self.driver.title=='百度一下,你就知道'
self.assertEqual(self.driver.title,'百度一下,你就知道')
def test_baidu_url(self):
'''百度测试:验证百度首页的URL'''
assert self.driver.current_url=='https://www.baidu.com/'
def test_baidu_video(self):
'''百度测试:验证点击视频跳转到视频的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('视频').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertEqual(self.driver.current_url,'https://haokan.baidu.com/?sfrom=baidu-top')
def test_baidu_map(self):
'''百度测试:验证点击地图跳转到地图的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('地图').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertTrue(self.driver.current_url.startswith('https://map.baidu'))
def test_baidu_postbar(self):
'''百度测试:验证点击贴吧跳转到贴吧的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('贴吧').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertTrue(self.driver.current_url.startswith('https://tieba.baidu.com/index.html'))
def test_baidu_live(self):
'''百度测试:验证点击直播跳转到直播的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('直播').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertTrue(self.driver.current_url.startswith('https://live.baidu.com/'))
def test_baidu_news(self):
'''百度测试:验证点击新闻跳转到新闻的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('新闻').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertTrue(self.driver.current_url.startswith('http://news.baidu.com/'))
if __name__ == '__main__':
unittest.main(verbosity=2)
二、测试固件只执行一次
from selenium import webdriver
import unittest
class BaiduTest(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.driver=webdriver.Chrome()
cls.driver.get('https://www.baidu.com')
cls.driver.maximize_window()
cls.driver.implicitly_wait(30)
@classmethod
def tearDownClass(cls) -> None:
cls.driver.quit()
def test_baidu_title(self):
'''百度测试:验证百度首页的title'''
# assert self.driver.title=='百度一下,你就知道'
self.assertEqual(self.driver.title,'百度一下,你就知道')
def test_baidu_url(self):
'''百度测试:验证百度首页的URL'''
assert self.driver.current_url=='https://www.baidu.com/'
def test_baidu_video(self):
'''百度测试:验证点击视频跳转到视频的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('视频').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertEqual(self.driver.current_url,'https://haokan.baidu.com/?sfrom=baidu-top')
self.driver.close()
self.driver.switch_to.window(nowhandler)
def test_baidu_map(self):
'''百度测试:验证点击地图跳转到地图的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('地图').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertTrue(self.driver.current_url.startswith('https://map.baidu'))
self.driver.close()
self.driver.switch_to.window(nowhandler)
def test_baidu_postbar(self):
'''百度测试:验证点击贴吧跳转到贴吧的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('贴吧').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertTrue(self.driver.current_url.startswith('https://tieba.baidu.com/index.html'))
self.driver.close()
self.driver.switch_to.window(nowhandler)
def test_baidu_live(self):
'''百度测试:验证点击直播跳转到直播的页面'''
nowhandler = self.driver.current_window_handle
self.driver.find_element_by_link_text('直播').click()
allhandlers = self.driver.window_handles
for handler in allhandlers:
if handler != nowhandler:
self.driver.switch_to.window(handler)
self.assertTrue(self.driver.current_url.startswith('https://live.baidu.com/'))
self.driver.close()
self.driver.switch_to.window(nowhandler)
def test_baidu_news(self):
'''百度测试:验证点击新闻跳转到新闻的页面'''
nowhandler = self.driver.current_window_handle
self.driver.find_element_by_link_text('新闻').click()
allhandlers = self.driver.window_handles
for handler in allhandlers:
if handler != nowhandler:
self.driver.switch_to.window(handler)
self.assertTrue(self.driver.current_url.startswith('http://news.baidu.com/'))
self.driver.close()
self.driver.switch_to.window(nowhandler)
if __name__ == '__main__':
unittest.main(verbosity=2)
三、按测试类执⾏
from selenium import webdriver
import unittest
class BaiduTest(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.driver=webdriver.Chrome()
cls.driver.get('https://www.baidu.com')
cls.driver.maximize_window()
cls.driver.implicitly_wait(30)
@classmethod
def tearDownClass(cls) -> None:
cls.driver.quit()
def test_baidu_title(self):
'''百度测试:验证百度首页的title'''
# assert self.driver.title=='百度一下,你就知道'
self.assertEqual(self.driver.title,'百度一下,你就知道')
def test_baidu_url(self):
'''百度测试:验证百度首页的URL'''
assert self.driver.current_url=='https://www.baidu.com/'
def test_baidu_video(self):
'''百度测试:验证点击视频跳转到视频的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('视频').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertEqual(self.driver.current_url,'https://haokan.baidu.com/?sfrom=baidu-top')
self.driver.close()
self.driver.switch_to.window(nowhandler)
def test_baidu_map(self):
'''百度测试:验证点击地图跳转到地图的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('地图').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertTrue(self.driver.current_url.startswith('https://map.baidu'))
self.driver.close()
self.driver.switch_to.window(nowhandler)
def test_baidu_postbar(self):
'''百度测试:验证点击贴吧跳转到贴吧的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('贴吧').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertTrue(self.driver.current_url.startswith('https://tieba.baidu.com/index.html'))
self.driver.close()
self.driver.switch_to.window(nowhandler)
if __name__ == '__main__':
# 按照测试类来进行执行
suite=unittest.TestLoader().loadTestsFromTestCase(BaiduTest)
unittest.TextTestRunner().run(suite)
四、按照测试模块执行
from selenium import webdriver
import unittest
class BaiduTest(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.driver=webdriver.Chrome()
cls.driver.get('https://www.baidu.com')
cls.driver.maximize_window()
cls.driver.implicitly_wait(30)
@classmethod
def tearDownClass(cls) -> None:
cls.driver.quit()
def test_baidu_title(self):
'''百度测试:验证百度首页的title'''
# assert self.driver.title=='百度一下,你就知道'
self.assertEqual(self.driver.title,'百度一下,你就知道')
def test_baidu_url(self):
'''百度测试:验证百度首页的URL'''
assert self.driver.current_url=='https://www.baidu.com/'
def test_baidu_video(self):
'''百度测试:验证点击视频跳转到视频的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('视频').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertEqual(self.driver.current_url,'https://haokan.baidu.com/?sfrom=baidu-top')
self.driver.close()
self.driver.switch_to.window(nowhandler)
def test_baidu_map(self):
'''百度测试:验证点击地图跳转到地图的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('地图').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertTrue(self.driver.current_url.startswith('https://map.baidu'))
self.driver.close()
self.driver.switch_to.window(nowhandler)
def test_baidu_postbar(self):
'''百度测试:验证点击贴吧跳转到贴吧的页面'''
nowhandler=self.driver.current_window_handle
self.driver.find_element_by_link_text('贴吧').click()
allhandlers=self.driver.window_handles
for handler in allhandlers:
if handler!=nowhandler:
self.driver.switch_to.window(handler)
self.assertTrue(self.driver.current_url.startswith('https://tieba.baidu.com/index.html'))
self.driver.close()
self.driver.switch_to.window(nowhandler)
if __name__ == '__main__':
# 按照测试模块来进行执行
suite=unittest.TestLoader().loadTestsFromModule('test_baidu_shouYe.py')
unittest.TextTestRunner().run(suite)
五、所有模块运行
import unittest import os def getTests(): '''加载所有的测试模块''' suite=unittest.TestLoader().discover( # 找到被执行模块的路径 start_dir=os.path.dirname(__file__), # 加载路径下所有一test_开头的测试模块的文件 pattern='test_*.py' ) return suite def runSuite(): unittest.TextTestRunner().run(getTests()) runSuite()

浙公网安备 33010602011771号