python3.5+selenium3.4自动化测试9_selenium框架2.0-unittest(上)

来源:互联网 发布:超人电力工程预算软件 编辑:程序博客网 时间:2024/06/03 18:37

框架2.0_unittest

今天讲的是unittest单元测试框架,在框架1.0的学习中我们不需要去理解什么类和函数,但是到2.0就要开始接触类的继承和函数的调用。

先上个之前的例子

# _*_ coding: utf-8 _*_from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import Selectfrom selenium.common.exceptions import NoSuchAttributeExceptionimport unittest,time,refrom time import strftime, localtimefrom datetime import datetimeimport HTMLTestRunnerclass LoginReset(unittest.TestCase):    def setUp(self):        self.driver=webdriver.Chrome()        self.driver.implicitly_wait(30)        self.base_url="http://192.168.1.131"        self.verificationErrors=[]        self.accept_next_alert=True    def test_loginreset(self):        '''        1.2.验证登陆界面的reset按钮        '''        driver=self.driver        driver.get(self.base_url+"/")        try:            driver.implicitly_wait(10) #智能等待10            driver.find_element_by_id("username").send_keys("admin")#见图一by_id            driver.find_element_by_id("secret").send_keys("password")            driver.find_element_by_id("reset_button").click()            time.sleep(10)#等待10        except:            driver.get_screenshot_as_file(u"D:/python/selenium/error_png/1.login/1.2/%s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])    def tearDown(self):        time.sleep(3)        self.driver.quit()        self.assertEqual([],self.verificationErrors)if __name__=="__main__":    suite=unittest.TestSuite()    suite.addTest(LoginReset("test_loginreset"))    unittest.TextTestRunner().run(suite)

掌握的技能

1.unittest框架构成,多看下selenium ide录制后的脚本

2.unittest可以理解为由TestCase+TestResult这两个模块构成,通过执行的是TestCase中的run方法,并把结果给TestResult(或它的子类)

3.setUp()和setUp()

setUp()方法中进行测试前的初始化工作,
tearDown()方法中执行测试后的清除工作。
setUp()和tearDown()都是TestCase类中定义的方法 ,这个地方从代码中可以看出很多时候是在执行打开浏览器和关闭浏览器的操作,但是这个是每执行一个case都要执行一次,这个地方可以思考如何把这两个也写到一个继承testcase类的类,然后我们的框架在继承这个类,这部分后面详解

4.setUpClass()和tearDownClass()

setUpClass()在一个测试类中在所有test开始之前,执行一次且必须使用到Testsuite(只有在TestSuite的run方法里面才对其调用)tearDownClass()在一个测试类中在所有test结束之后,执行一次且必须使用到Testsuite(只有在TestSuite的run方法里面才对其调用),简单说这两个函数就是为了执行所有case过程中只打开一次浏览器和关闭一次浏览器,跟setup()和tearDown()有区别

5.TestSuite可以理解是包含所有测试用例的一个容 器

6.TestResult和HTMLTestRunner,TextTestRunner,

每次执行用例时,都会把执行结果保存到TestResult中,
textTestRunner这个类,在开始就使用了类TextTestResult,而这个类也是继承TestResult,而后在执行的过程中最终把TextTestResult实例对象传递给TestCase的run方法;
HTMLTestRunner模块也是在继承在TestResult类的基础上的

7.创建多个以test开头的测试用例进行测试,这个可以查看之前写过python3.5+selenium3.4自动化测试4_随机组合的用户名和密码登陆

补充下第3点后面的重新构建一个类和调用,刚才在前文的代码就可以分为两部分,先创建一个mytest.py文件

# _*_ coding: utf-8 _*_from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import Selectfrom selenium.common.exceptions import NoSuchAttributeExceptionimport unittest,time,refrom time import strftime, localtimefrom datetime import datetimeclass MyTest(unittest.TestCase):    """    The base class is for all testcase.    """     def setUp(self):        self.driver=webdriver.Chrome()        self.driver.implicitly_wait(30)        self.base_url="http://192.168.1.131"        self.verificationErrors=[]        self.accept_next_alert=True    def tearDown(self):        time.sleep(3)        self.driver.quit()        self.assertEqual([],self.verificationErrors)

继承Mytest这个类

# _*_ coding: utf-8 _*_from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import Selectfrom selenium.common.exceptions import NoSuchAttributeExceptionimport unittest,time,refrom time import strftime, localtimefrom datetime import datetimeimport HTMLTestRunnerimport mytestclass LoginReset(mytest.Mytest):    def test_loginreset(self):        '''        1.2.验证登陆界面的reset按钮        '''        driver=self.driver        driver.get(self.base_url+"/")        try:            driver.implicitly_wait(10) #智能等待10            driver.find_element_by_id("username").send_keys("admin")#见图一by_id            driver.find_element_by_id("secret").send_keys("password")            driver.find_element_by_id("reset_button").click()            time.sleep(10)#等待10        except:            driver.get_screenshot_as_file(u"D:/python/selenium/error_png/1.login/1.2/%s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])if __name__=="__main__":    suite=unittest.TestSuite()    suite.addTest(LoginReset("test_loginreset"))    unittest.TextTestRunner().run(suite)

这样就可以在任意时候统一修改浏览器和网址

用实际用例代码长期更新,介绍selenium使用中的知识小点,希望大家关注

关注微信公众号:

这里写图片描述

阅读全文
0 0