框架2.0_unittest
今天讲的是unittest单元测试框架,在框架1.0的学习中我们不需要去理解什么类和函数,但是到2.0就要开始接触类的继承和函数的调用。
先上个之前的例子
# _*_ coding: utf-8 _*_
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchAttributeException
import unittest,time,re
from time import strftime, localtime
from datetime import datetime
import HTMLTestRunner
class 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 webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchAttributeException
import unittest,time,re
from time import strftime, localtime
from datetime import datetime
class 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 webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchAttributeException
import unittest,time,re
from time import strftime, localtime
from datetime import datetime
import HTMLTestRunner
import mytest
class 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)
这样就可以在任意时候统一修改浏览器和网址
网友评论