python单元测试框架(测试固件、批量执行)

2023-11-09

python测试框架
在Python语言中应用最广泛的单元测试框架是unittest和pytest,unittest属于标准库,只要安装了Python解释器后就可以直接导入使用了,pytest是第三方的库,需要单独的安装。

1.白盒测试原理
在软件架构的层面来说,测试最核心的步骤就是在软件开发过程中。就软件本身而言,软件的行为或者功能是软件细节实现的产物,这些最终是交付给用户的东⻄。所以在早期执行测试的系统有可能是一个可测试和健壮的系统,它会带来为用户提供的功能往往是让人满意的结果。因此给予这样的⻆度,开始执行测试的最佳方法是来自源代码,也就是软件编写的地方以及开发人员。由于源代码是对开发人员是可⻅的,这样的一个测试过程我们可以称为白盒测试

2.自动化测试用例编写
 

3.unittest实战

   unittest各个组件的介绍

testCase测试⽤例:测试类继承unittest模块中的TestCase类后,依据继承的这个类来设置⼀个新的测试⽤例类和测试⽅法。
测试固件:测试固件表示⼀个测试⽤例或者多个测试以及清理⼯作所需要的设置或者准备。初始化合情理
testSuite测试套件:测试套件顾名思义就是相关测试⽤例的集合。在unittest中主要通过TestSuite类提供对测试套件的⽀持。
testRunner测试运⾏:管理和运⾏测试⽤例的对象。
assert测试断⾔:对所测试的对象依据返回的实际结果与期望结果进⾏断⾔校验
测试结果:测试结果类管理着测试结果的输出,测试结果呈现给最终的⽤户来反馈本次测试执⾏的结果信息。
自动化测试用例要素包含:

1、前提条件 setUp()

2、测试步骤

3、结果验证

4、清理 tearDown()

4.unittest测试固件详解:
在unittest中测试固件依据方法可以分为两种执行方式,一种是测试固件只执行一次,另外一种是测试固件每次都执行,下面依据具体的案例来讲解二者

1.测试固件每次均执行

from selenium import webdriver
import unittest
class BaiduTest(unittest.TestCase):
    def setUp(self) -> None:
        self.driver=webdriver.Chrome()
        self.driver.get('http://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.assertTrue(self.driver.current_url.startswith('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'))
 
if __name__ == '__main__':
    unittest.main(verbosuty=2)

执行如上的代码后,它的顺序为:测试固件-->测试用例,测试固件-->测试用例

2.测试固件只执行一次

使用的是类方法,这样测试固件只会执行一次的,⻅案例的代码:

from selenium import webdriver
import unittest
 
class BaiduTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.driver=webdriver.Chrome()
        cls.driver.maximize_window()
        cls.driver.get('http://www.baidu.com')
        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.assertTrue(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)
 
        unittest.main(verbosity=2)

5.测试用例执行顺序详解
在unittest中,测试点的执行顺序是依据ascill码来执行的,也就是说根据ASCII码的顺序加载,数字与字母的顺序为:0-9,A-Z,a-z,所以以A开头的测试用例方法会优先执行,以a开头会后执行。也就是根据数字的大小从小到大执行的,切记数字的大小值的是不包含test,值的是test后面的测试点的数字大小,

6.verbosity的详解
在unittest中,执行的时候默认是1,也就是unittest.main(verbosity=1),在verbosity有三个参数,分别是0,1,2,代表的意思具体如下:

0(静默模式):仅仅获取总的测试用例数以及总的结果

1(默认模式)

2(详细模式):测试结果会显示每个测试用例的所有相关信息

7.测试用例注意事项:
            1、在⼀个测试类⾥⾯,每⼀个测试⽅法都是以test开头的,test不能是中间或者尾部,必须是开头,建议test_

2、每⼀个测试⽤例⽅法都应该有注释信息,这样在测试报告就会显示具体的测试点的检查点

3、在⾃动化测试中,每个测试⽤例都必须得有断⾔,⽆断⾔的⾃动化测试⽤例是⽆效的

4、最好⼀个测试⽤例⽅法对应⼀个业务测试点,不要多个业务检查点写⼀个测试⽤例

5、如果涉及到业务逻辑的处理,最好把业务逻辑的处理⽅法放在断⾔前⾯,这样做的⽬的是不要因为业务逻辑执⾏错误导致断⾔也是失败

6、测试⽤例名称最好规范,有约束

7、是否先写⾃动化测试的测试代码,在使⽤⾃动化测试⽅式写,本⼈觉得没必要,毕竟能够做⾃动化测试的都具备了功能测试的基本⽔平,所以没必要把⼀个业务的检查点写多次,浪费时间和⼈⼒成本。

8.测试套件详解
按测试类执行

from selenium import webdriver
import unittest
 
class BaiduTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.driver=webdriver.Chrome()
        cls.driver.maximize_window()
        cls.driver.get('http://www.baidu.com')
        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.assertTrue(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)
 
if __name__ == '__main__':
    # #按测试类来进行执行 调用TestLoader()当中的loadTestsFromTestCase的方法
    suite=unnittest.TestLoader().loadTestsFromTestCase(baiduTest)
    unnitest.TextTestRunner().run(suite)

按测试模块执行:

from selenium import webdriver
import unittest
 
class BaiduTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.driver=webdriver.Chrome()
        cls.driver.maximize_window()
        cls.driver.get('http://www.baidu.com')
        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.assertTrue(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)
 
if __name__ == '__main__':
    # 按模块来进行执行
    suite = unnittest.TestLoader().loadTestsFromModule('test_baidu_class.py')
    unnitest.TextTestRunner().run(suite)

9.批量执行所有的测试用例

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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python单元测试框架(测试固件、批量执行) 的相关文章

随机推荐

  • 【前端】Vue项目:旅游App-(15)home:网络请求house数据、动态并组件化展示house列表信息

    文章目录 目标 过程与代码 content组件 请求数据 houseList request store 控制台输出 动态加载更多列表数据 house item组件 阶段1 数据传送 阶段2 对着目标写样式 house item v9 ho
  • Ubuntu开发环境搭建详细笔记

    最近想要搭建一套 linux 的开发环境 因此想要在现有的 ThinkPad T470s 上安装 ubuntu 18 04 双系统 之前一直用的都是用 virtualbox 虚拟机 同学建议直接安装linux系统一直没装 结果就是各种不方便
  • 如何判断/获取屏幕的状态(亮屏已解锁,亮屏未解锁,黑屏)

    最近自己在做一个统计手机使用时间 频次的时间管理软件 遇到了这个问题 网上资料有些杂乱 有些还是错误的 于是我参考了一些资料 查阅了官方的API 将不同的方法的作用与区别总结在此 方法大致区别如下图 1 PowerManager的isInt
  • Python 随机数函数 random 七种常用方法解说

    目录 一 random random 返回 0 与 1 之间的随机浮点数N 二 random uniform a b 返回 a 与 b 之间的随机浮点数N 三 random randint a b 返回一个随机的整数N 四 random r
  • JVM相关知识点

    目录 编辑一 JVM 内存区域划分 1 栈 2 堆 3 元数据区 方法区 二 JVM 类加载机制 1 类加载机制介绍 2 双亲委派模型 经典问题 三 JVM 垃圾回收机制 GC 1 了解 GC 2 GC 实际工作过程 1 找到垃圾 判定垃圾
  • Spring中的 @Lazy的简单理解

    Spring IoC ApplicationContext 容器一般都会在启动的时候实例化所有单实例 bean 如果我们想要 Spring 在启动的时候延迟加载 bean 即在调用某个 bean 的时候再去初始化 那么就可以使用 Lazy
  • 机器学习:过拟合

    过拟合 通俗来讲过拟合就是 选用的模型过于复杂 d v c d vc dvc 过大 模型在训练集上有很好的表现 但是在真实预测过程中的表现和训练集上的差别过大 也就是没有做到机器学习的两个核心要打求之一的
  • 大型网站WEB服务器技术选型参考

    大型网站WEB服务器技术选型参考 网站 操作系统 WEB服务器 Google Linux Google Web Server Microsoft Windows 2003 IIS 6 0 Ebay com Windows 2000 2003
  • ctfshow_web9 【MD5加密漏洞绕过sqli】

    WEB ctfshow web9 MD5加密漏洞绕过sqli 打开题目是一个登录框 用户名处预先输入了admin 试了各种sql注入的姿势 都不好使 对网址进行扫描 找到了robots txt 访问它得到以下提示 访问index phps
  • 【满分】【华为OD机试真题2023 JAVA&JS】获得完美走位

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 获得完美走位 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 在第一人称射击游戏中 玩家通过键盘的A S D W四个按键控制游戏人物分别向左 向后 向右 向前进行
  • 穿山甲报错 splashAdLoadFail data analysis error

    使用swift接入穿山甲 未接入GroMore 这个时候如果代码位配置错误会导致如下错误 splashAdLoadFail error Optional Error Domain com buadsdk Code 98764 data an
  • Linux终端显示工作路径

    在当前终端中使用 export PS1 u h w 如果需要持续使用 代码如下 sudo i 切换为root用户 echo export PS1 u h w gt gt etc profile
  • Python爬虫常用哪些库?

    经常游弋在互联网爬虫行业的程序员来说 如何快速的实现程序自动化 高效化都是自身技术的一种沉淀的结果 那么使用Python爬虫都会需要那些数据库支持 下文就是有关于我经常使用的库的一些见解 请求库 1 urllib urllib库是Pytho
  • 线程池的简介说明

    转自 线程池的简介说明 在多线程应用程序开发中 如果我们不使用线程池 则每次创建和销毁线程将会消耗宝贵的CPU 内存资源 所以我们必须创建一个线程池 线程池的功能 线程池用于管理线程 用于减少系统资源消耗 创建一个线程池 实现思路 借助线程
  • 【云原生】我将ChatGPT变成Kubernetes 和Helm 终端

    kubectl get po deploy svc kubectl run image nginx nginx app port 80 env DOMAIN cluster kubectl expose deployment nginx a
  • Java代码中如何中断线程呢?

    转自 http www java265 com JavaCourse 202204 3189 html 下文笔者讲述使用Java代码中断线程的方法分享 如下所示 实现思路 使用interrupt 方法进行线程中断 在中断前 我们可使用isI
  • python-6-for循环及格式化输出format三种用法

    前言 循环我们前面讲过了无限循环 那么for循环属于什么循环呢 显然就是有限循环 另外格式化输出我们前面也讲过 但是format也能做到不一样的格式化输出 一起看看吧 一 for 循环 1 for 有限循环 for 有限循环 s 123as
  • 操作系统:首次适应算法和最佳适应算法(c语言实现)

    1 要求 用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc 和回收过程free 其中 空闲分区通过空闲分区链来管理 在进行内存分配时 系统优先使用空闲区低端的空间 假设初始状态下 可用的内存空间为640KB 并有下
  • ArchLinux的安装和配置

    文章目录 安装ArchLinux 分区 更换镜像源 下载arch软件 进入新系统 安装系统引导工具 为root设置密码 解除U盘挂载 重启虚拟机 配置ArchLinux 配置语言区域 配置时区 设置主机名 中文本地化配置 提前准备 虚拟机软
  • python单元测试框架(测试固件、批量执行)

    python测试框架 在Python语言中应用最广泛的单元测试框架是unittest和pytest unittest属于标准库 只要安装了Python解释器后就可以直接导入使用了 pytest是第三方的库 需要单独的安装 1 白盒测试原理