这篇具有很好参考价值的文章主要介绍了Python自动化测试框架之unittest使用详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。
unittest是Python自动化测试框架之一,提供了一系列测试工具和接口,支持单元测试、功能测试、集成测试等多种测试类型。unittest使用面向对象的思想实现测试用例的编写和管理,可以方便地扩展和定制测试框架,支持多种测试结果输出格式
1 unittest框架
unittest 是python 的单元测试框架,它主要有以下作用:
提供用例组织与执行:当你的测试用例只有几条时,可以不必考虑用例的组织,但是,当测试用例达到成百上千条时,大量的测试用例堆砌在一起,就产生了扩展性与维护性等问题,此时需要考虑用例的规范与组织问题了。单元测试框架就是来解决这个问题的。
提供丰富的比较方法:在用例执行完之后都需要将实际结果与预期结果进行比较(断言),从而断定用例是否可以顺利通过。单元测试一般会提供丰富的断言方法。例如,判断相等/不相等、包含/不包含、True/False等断言方法。
提供丰富的日志:当测试用例执行失败时能抛出清晰的失败原因,当所有用例执行完成后能提供丰富的执行结果。例如,总的执行时间,失败用例数,成功用例数等。
unittest里面有四个很重要的概念,test fixture,test case,test suite,test runner。
Test Fixture
对一个测试用例环境的搭建和销毁,就是一个fixture,通过覆盖setUp()和tearDown()方法来实现。
setUp()方法可以进行测试环境的搭建,比如获取待测试浏览器的驱动,或者如果测试中需要访问数据库,那么可以在setUp()中通过建立数据库连接来进行初始化。
tearDown()方法进行环境的销毁,可以进行关闭浏览器,关闭数据库连接,清除数据库中产生的数据等操作;Test Case
一个TestCase的实例就是一个测试用例。测试用例就是一个完整的测试流程,包括测试前准备环境的搭建(setUp)、实现测试过程的代码,以及测试后环境的还原(tearDown)。单元测试(unit test)的本质就在这里,一个测试用例就是一个完整的测试单元,可以对某一个功能进行验证。Test Suite
一个功能的验证往往需要多个测试用例,可以把多个测试用例集合在一起执行,这个就产生了测试套件TestSuite的概念。Test Suit用来将多个测试用例组装在一起;
Test Runner测试的执行也是非常重要的一个概念,在unittest框架中,通过TextTestRunner类提供的run()方法来执行test suite/test case。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
from selenium import webdriver import unittest import time import os from selenium.common.exceptions import NoAlertPresentException from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.by import By class Baidu1(unittest.TestCase): def setUp( self ): print ( "-----setUp-----" ) self .driver = webdriver.Chrome() self .url = "https://www.baidu.com/" self .driver.maximize_window() time.sleep( 3 ) def tearDown( self ): print ( "-----tearDown-----" ) self .driver.quit() def test_hao( self ): print ( "111111111" ) driver = self .driver url = self .url driver.get(url) driver.find_element(By.LINK_TEXT, "hao123" ).click() time.sleep( 6 ) def test_hbaidu( self ): print ( "22222222" ) driver = self .driver url = self .url driver.get(url) driver.find_element(By. ID , "kw" ).send_keys( "unittest" ) driver.find_element(By. ID , "su" ).submit() time.sleep( 5 ) print (driver.title) # self.assertNotEqual(driver.title, "百度一下_百度搜索", msg="不相等") # self.assertTrue("beautiful"=="beauty", msg="Not Equal!") time.sleep( 6 ) def saveScreenAsPhoto( self , driver, file_name): if not os.path.exists( "./image" ): os.makedirs( "./image" ) now = time.strftime( "%Y%m%d-%H%M%S" , time.localtime(time.time())) driver.get_screenshot_as_file( "./image/" + now + "-" + file_name) time.sleep( 3 ) print ( "3333333" ) if __name__ = = "__main__" : unittest.main() |
这个脚本中的类 Baidu1 继承了unittest.TestCase类,所以它使用了unittest框架来组织测试用例(TestCase)。
setUp() 和 setDown() 是unittest框架中的测试固件。
以test_开头命名的方法,是测试方法,在运行整个类的时候会默认执行。
unittest提供了全局的main()方法,使用它可以方便地将一个单元测试模块变成可以直接运行的测试脚
本。main()方法搜索所有包含在该模块中以”test"命名的测试方法,并自动执行他们。
2 批量执行脚本
2.1 构建测试套件
当我们增加了被测试功能和相应的测试用例之后,我们就需要把多个测试用例组织在一起执行,这就需要用到上文中提到的测试套件Test Suite
假设我们已经编写了testbaidu1.py,testbaidu2.py两个文件
testbaidu2.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
from selenium import webdriver import unittest import time from selenium.common.exceptions import NoAlertPresentException from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.by import By class Baidu2 (unittest.TestCase) : def setUp( self ): self .driver = webdriver.Chrome() self .driver.implicitly_wait( 30 ) self .base_url = "http://www.baidu.com/" self .driver.maximize_window() self .verificationErrors = [] self .accept_next_alert = True def tearDown( self ): self .driver.quit() self .assertEqual([], self .verificationErrors) def test_hao( self ): driver = self .driver driver.get( self .base_url) driver.find_element(By.LINK_TEXT, "新闻" ).click() 文章来源:https://www.toymoban.com/news/detail-468264.html 文章来源地址https://www.toymoban.com/news/detail-468264.html
|
到了这里,关于Python自动化测试框架之unittest使用详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!