您现在的位置是:首页 >学无止境 >selenium——unittest框架网站首页学无止境

selenium——unittest框架

冒泡迪 2024-06-14 17:18:59
简介selenium——unittest框架

一、unittest框架基本介绍

在进行selenium IDE脚本录制导出的脚本中,我们发现其中多了很多代码,这些代码正是unittest测试框架。unittest 是web界面的功能测试框架,白盒测试测试框架是Junit。unittest 单元测试提供了创建测试用例、测试套件以及批量执行的方案。unittest 在安装python 以后就直接自带了,调用import unittest 就可以使用。

二、unittest框架解析

在这里插入图片描述

1.test fixture(测试固件):存了类里面固定的方法,初始化和清理测试环境,比如创建临时的数据库,文件和目录等
2.test case:单元测试用例,TestCase 是编写单元测试用例最常用的类
3.test suite(测试套件):把测试方法放到容器里,单元测试用例的集合,TestSuite 是最常用的类
4.test runner:执行单元测试
5.test report:生成测试报告

三、unittest框架使用方法

1.测试固件

一个方法一个方法的去写。

setup()进行初始化
teardown() 进行清理  
Self 代表实例
Class 继承父类

from selenium import webdriver
import unittest
import time
from selenium.common.exceptions import NoAlertPresentException
from selenium.webdriver.common.by import By

#setup和teardown在每次运行test_程序之前和之后都会默认运行
class testCase1(unittest.TestCase):
   #初始化
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.url = "http://www.baidu.com/"
        self.driver.get(self.url)
        time.sleep(3)
        self.driver.maximize_window()
        time.sleep(3)

   #关闭以及清理
    def tearDown(self):
        self.driver.quit()
        
   #自动默认运行前面加test_
    def test_baidu1(self):
        driver = self.driver
        driver.find_element(By.ID, "kw").send_keys("星黛露")
        driver.find_element(By.ID, "su").click()
        time.sleep(3)
        
    #调用才使用
    def is_alert_exist(self):
        try:
            self.driver.switch_to.alert
        except NoAlertPresentException as e:
            return False
        return True
    if __name__ == "__main__ ":
      unittest.main(verbosity=0)

2.测试套件

测试套件:通俗来讲就是存放测试用例(测试方法)的一个容器。
(1)类里面一个方法一个方法添加
test001和test002都是文件,testCase1和testCase2是文件里的类可以称之为测试用例,test_baidu1和test_baidu2是类里的方法。
Addtest

import unittest
from src0303 import test001, test002

#创建一个测试套件
def createsuite():
    suite=unittest.TestSuite()
    suite.addTest(test001.testCase1("test_baidu1"))
    suite.addTest(test002.testCase2("test_baidu1"))
    return suite

if __name__ == "__main__":
    suite = createsuite()
     runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)

(2)一个类一个类的添加
makeSuite():只是添加文件里的类,类里的方法不用一个一个的添加。

import unittest
from src0303 import test001, test002

def createsuite():
    suite=unittest.TestSuite()
    suite.addTest(unittest.makeSuite(test001.testCase1))
    suite.addTest(unittest.makeSuite(test001.testCase2))
    return suite

if __name__ == "__main__":
    suite = createsuite()
     runner = unittest.TextTestRunner(verbosity=1)
    runner.run(suite)

(3) 一个文件一个文件的测试
适用于文件非常多的时候,文件要是一定格式命名的。
discover()

#src202201文件夹,找到test00*.py开头的文件夹
import unittest
def createSuite():
	discover=unittest.defaultTestLoader.discover('../src202201',pattern='test00*.py',top_level_dir=None)

if __name__=="__main__":
 	suite = createsuite()
 	runner = unittest.TextTestRunner(verbosity=1)
 	runner.run(suite)

注:Verbosity=1或者2表示打印方法很详细,如下:
在这里插入图片描述

3.用例的执行顺序

unittest框架(文件名,类名,方法名-)默认加载测试用例的顺序是根据ASCII码的顺序,数字与字母的顺序为:0-9,A-Z,a-z。例如:Testadd比Testade优先执行。

4.忽略测试用例中的方法

适用于书写方法太多,但是只想执行少数测试用例的情况。在想忽略的方法前加标签@。

@unittest.skip("skipping")

5.unittest断言

(1)断言概念
断言是为了判断实际和预期结果是否一致。自动化的测试中, 对于每个单独的case来说,一个case的执行结果中, 必然会有期望结果与实际结果, 来判断该case是通过还是失败, 在unittest 的库中提供了大量的实用方法来检查预期值与实际值, 来验证case的结果, 一般来说, 检查条件大体分为等价性, 逻辑比较以及其他, 如果给定的断言通过, 测试会继续执行到下一行的代码, 如果断言失败, 对应的case测试会立即停止或者生成错误信息( 一般打印错误信息即可) ,但是不要影响其他的case执行。
(2)常用断言方法

断言方法断言描述
assertEqual(arg1, arg2, msg=None)验证arg1=arg2,不等则fail
assertNotEqual(arg1, arg2, msg=None)验证arg1 != arg2, 相等则fail
assertTrue(expr, msg=None)验证expr是true,如果为false,则fail
assertFalse(expr,msg=None)验证expr是false,如果为true,则fail
assertIs(arg1, arg2, msg=None)验证arg1、arg2是同一个对象,不是则fail
assertIsNot(arg1, arg2, msg=None)验证arg1、arg2不是同一个对象,是则fail
assertIsNone(expr, msg=None)验证expr是None,不是则fail
assertIsNotNone(expr, msg=None)验证expr不是None,是则fail
assertIn(arg1, arg2, msg=None)验证arg1是arg2的子串,不是则fail
assertIn(arg1, arg2, msg=None)验证arg1不是arg2的子串,是则fail
assertIsInstance(obj, cls, msg=None)验证obj是cls的实例,不是则fail
assertNotIsInstance(obj, cls,msg=None)验证obj不是cls的实例,是则fail
以第一个断言举例:
class testCase1(unittest.TestCase):
   #初始化
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.url = "http://www.baidu.com/"
        self.driver.get(self.url)
        time.sleep(3)
        self.driver.maximize_window()
        time.sleep(3)

   #关闭以及清理
    def tearDown(self):
        self.driver.quit()
        
   #自动默认运行前面加test_
    def test_baidu1(self):
        driver = self.driver
        driver.find_element(By.ID, "kw").send_keys("星黛露")
        driver.find_element(By.ID, "su").click()
        time.sleep(3)
        #判断title(星黛露的百度搜索)"星黛露_百度搜索"是否相同,若不相同输出“not equal”并调用is_alert_exist(self)报异常,此处是相等的。
        self.assertEqual(driver.title,"星黛露_百度搜索",msg="not equal!")
        
#调用才使用
    def is_alert_exist(self):
        try:
            self.driver.switch_to.alert
        except NoAlertPresentException as e:
            return False
        return True
    if __name__ == "__main__ ":
      unittest.main(verbosity=0)

6.HTML报告生成

将控制台结果整理成结果,涉及失败的原因和结果。将HTMLTestRunner.py放到安装python的lib文件夹里。
未完待更新…

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。