论python自动化测试(3)- 自动化框架及工具

2023-11-02

python自动化测试(3)

自动化框架及工具

1 概述

手续的关于测试的方法论,都是建立在之前的文章里面提到的观点:

  • 功能测试不建议做自动化
  • 接口测试性价比最高
  • 接口测试可以做自动化

后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍。

本系列选择的测试语言是 python 脚本语言。由于其官方文档已经对原理有了比较清楚的解释,本文就不做一些多余的翻译工作了。偏向于实战部分,而且为了偏向实战,也会结合 IDE 工具和项目组织来进行讲解。

理由如下:

  1. 脚本语言,开发和迭代的效率极高
  2. 第三方的扩展库极多,有很我现成的工具可以使用

在正式进入到 自动化测试 的领域之前,先要建立这样的价值观。在Google内部工程师发布的软件测试的出版物里面提到:

“软件的自动化测试是有成本的,而且成本不低,基本上相当于在原有的 功能开发工程 的基础上再建立一个平行的 测试开发工程 ”。

也就是说,如果你对自动化测试有你的期望值,那么就肯定是要付出相应的代价和精力的。好的东西也是需要优秀的人花大量的时间去完成的。

本文已经收入合集:《基于python的互联网软件测试开发(自动化测试)-全集合》,欢迎访问的查看:

基于Python的互联网软件测试开发

2 PyUnit测试框架

使用 python 作为自动化编程语言,那么就自然的使用 pyunit 作为自动化测试框架了。

如下部分的内容主要来自于 pyunit 的官方文档,本文仅仅做了一些翻译和结构上的简单调整。这部分属于测试框架的基本原理和概念部分,在进行代码编写前,有必要进行了解。

python的单元测试框架 PyUnit,可以认为是 Java 语言下的单元测试框架 JUnit 的 Python 语言实现版本,甚至其作者之一 Kent Beck 就是 JUnit 的作者。

unittest要达到如下目标:

  • 支持自动化测试
  • 让所有的测试脚本共享 开启(setup) 和 关闭(shutdown) 的代码
  • 可以通过集合(collections)的方式来组织测试用例脚本
  • 将所有的测试脚本从测试报告框架中独立出来

为了达到以上目标,unittest支持如下几个重要概念:

  • 测试装置(test fixture) 为一个或者多个测试用例做一些准备工作,例如:连接一个数据库,创建一个目录,或者开启一个进程
  • 测试用例(test case) 测试用例是测试行为的最小单元,通过对一些输入输出值的对比来进行测试检查
  • 测试套件(test suite) 将 测试用例 或者 测试用例集合 聚合组织起来的集合。可以批量执行一个测试套件内所有的测试用例
  • 测试执行器(test runner)
    组织安排测试脚本执行活动的组件。测试执行器通过一些图形界面,文本界面或者返回一些特殊的值来展示测试脚本的测试结果。主要用于生成测试报告

3 基本示例

如下示例也来自于官方文档 basic_demo.py:

# coding:utf-8
"""
基本的自动化测试脚本 basic_demo.py
"""
__author__ = 'zheng'

import unittest


class TestStringMethods(unittest.TestCase):

    def setUp(self):
        print 'init by setUp...'

    def tearDown(self):
        print 'end by tearDown...'

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())
        self.assertTrue('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)


if __name__ == '__main__':
    unittest.main()

虽然官方文档里面介绍了几种组织测试用例脚本的方式:

1、独立测试函数

2、单用例测试类

3、多用例测试类

不同的编写形态,会有不同的组织方式,具体的可以看官方文档。本文作者研究过官方文档后,最喜欢第三种方式 多用例测试类,也就是上面基本示例的方式,这种方式具有如下特点:

  • 测试类 继承于 unittest.TestCase
  • 一个测试类可以管理多个 测试脚本函数
  • 测试脚本函数名称需要以 test_ 开头
  • 一个测试类里面的所有的测试函数共享 setUp和tearDown函数

在控制台中运行此程序:

➜  src git:(master) ✗ python basic_demo.py
init by setUp...
Fend by tearDown...
init by setUp...
end by tearDown...
.init by setUp...
end by tearDown...
.
======================================================================
FAIL: test_isupper (__main__.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "basic_demo.py", line 24, in test_isupper
    self.assertTrue('Foo'.isupper())
AssertionError: False is not true

----------------------------------------------------------------------
Ran 3 tests in 0.001s

FAILED (failures=1)
➜  src git:(master)

前面的基本例子的 main 函数采用的最简单的方式,直接运行所有的测试用例,并生成默认的文本报告。其实只需要对调用函数做一些简单的修改,可以将这些测试用例进行合理组织,并获取其实有用的数据信息,以便和信息系统进行集成,形成较好的扩展。

if __name__ == '__main__':
    # unittest.main()
    # 装载测试用例
    test_cases = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)
    # 使用测试套件并打包测试用例
    test_suit = unittest.TestSuite()
    test_suit.addTests(test_cases)
    # 运行测试套件,并返回测试结果
    test_result = unittest.TextTestRunner(verbosity=2).run(test_suit)
    #生成测试报告
    print("testsRun:%s" % test_result.testsRun)
    print("failures:%s" % len(test_result.failures))
    print("errors:%s" % len(test_result.errors))
    print("skipped:%s" % len(test_result.skipped))

运行后生成的输出为:

➜  src git:(master) ✗ python basic_demo.py
test_isupper (__main__.TestStringMethods) ... init by setUp...
FAIL
end by tearDown...
test_split (__main__.TestStringMethods) ... init by setUp...
end by tearDown...
ok
test_upper (__main__.TestStringMethods) ... init by setUp...
end by tearDown...
ok

======================================================================
FAIL: test_isupper (__main__.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "basic_demo.py", line 23, in test_isupper
    self.assertTrue('Foo'.isupper())
AssertionError: False is not true

----------------------------------------------------------------------
Ran 3 tests in 0.001s

FAILED (failures=1)
testsRun:3
failures:1
errors:0
skipped:0

显然上面的输入结果已经将测试的结果进行了统计,这些数据都是一次测试活动中的重要指标,这些数据可以入库,和测试信息管理系统集成,后期生成仪表盘或者统计报表,形成稳定和产品测试线路图,这些都是和开发相关的了,在此不再多叙述了。

结合上面的具体例子,我们也可以找到上一节的理论部分对应的具体实现对象:

  • 测试装置(test fixture) 由setUp函数来做初始化工作,由tearDown做销毁工作

  • 测试用例(test case) 对应TestCase类,或者更细化的对应里面的测试脚本函数

  • 测试套件(test suite) 对应TestSuite类

  • 测试执行器(test runner) 对应TextTestRunner类

4 IDE工具

既然需要开发代码的生产力,那么就需要介绍一款IDE工具-- Pycharm。不可否认,它是目前最专注/专业的 Python 语言的 IDE 了。在对Pyunit 也有比较好的支持。

主要支持如下:

  • 可视化的编程开发(这是IDE的基本特点)

  • 对测试结果进行可视化的展示

  • 导出生成HTML的测试报告

  • 可视化控制用例执行(这个在开发调试阶段很方便,可以方便控制指定代码单元运行)

    a.让一个目录下的所有用命执行
    b.让单个文件内所有用例执行
    c.让单个文件内的单个用命执行

4.1 运行和调试

Pycharm 对测试脚本提供了灵活的运行和调试支持。

通过pycharm,开发人员可以不用编写main函数,就可以实现如下功能:

  • 运行一个文件下所有的测试类
  • 运行一个测试类的所有测试脚本
  • 运行一个测试类的某个测试脚本

其中 “运行一个测试类的某个测试脚本” 比较有用,适合在开发阶段快速地对单个脚本进行开发和运行调试。

使用方法:

1、将光标移动到测试函数内部

2、按下运行快捷键 ctrl+shift+F10 (Eclipse快捷键方案)
如果要断点调试,则使用Debug模式,即可对单个函数运行和断点调试了。

当然,也可以不必借用IDE,而通过对testSuit操作,也可以实现以上功能,但是IDE却提供了更灵活直接的选择。这只是一些IDE使用技巧,也不多述了。

4.2 结果可视化

对于前面提到的例子,如果选择在IDE中运行此程序,会看到如下效果:

在这里插入图片描述

可以看到全部运行通过。如果刻意将其中一个弄成不通过的,则会显示如下的结果:

在这里插入图片描述

4.3 生成测试报告

Pycharm也提供了测试结果报告的导出功能,在测试结果显示框上的一个功能按钮上。

在这里插入图片描述

导出结果如下:

在这里插入图片描述

当然,如果不考虑和信息系统集成,不考虑后续的仪表盘和测试统计工作,仅仅只是要生成报告,这个功能已经足够了。

一般情况下,做自动化测试和开发,上面的那些那些技能已经完全能够满足要求了,接下来要做的事情就是利用各种计算机基本知识,面对不断增加的业务需求,而不断地增加测试用例脚本了。

功能开发项目,原理都很简单,但是随着量的增加,都会形成规模,测试开发工程也是一样。

5 项目组织

之前对测试用例的 开发调试态 的工具进行了介绍。但是如果真正的要纳入到 持续集成 的自动化体系,就显然不能依赖于 IDE 了。而是使用python 语言的组织和调用方式了,比如:要有 main 函数来作为执行入口,等等。

详细的技术实现细节,在后面有机会,将再会写相应的文章进行介绍。

通过脱离IDE的项目组织方式,有如下优点:

  • 可以通过事件触发来执行所有脚本(能够成为 持续集成 流水线的一环节)
  • 可以将数据全部提出并进行自定义加工和处理(和测试信息系统集成,为质量分析系统提供数据源)

6 测试平台

关于如何自动化生成测试报告这个测试产物,现在有一些平台能够提供接口调用及报告展示和分享功能,详情参考:https://blog.csdn.net/weixin_50271247/article/details/109132491

在这里插入图片描述

7 小结

本小部分的内容,主要是讲基于 python 语言的 自动化测试框架 pyunit的一些设计思想和基本使用示例。其实工具的使用方法很简单,但是如何利用好这些工具来进行软件生产,则需要其它的计算机技能了,在后续的文章中将会从工程方面和技术方面来对此框架的应用进行深入的扩展。

(未完,待续。。。。)

在这里插入图片描述
上面是我收集的一些视频资源,在这个过程中帮到了我很多。如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们扣扣群【313782132 】,里面有各种软件测试资源和技术讨论。

在这里插入图片描述
当然还有面试,面试一般分为技术面和hr面,形式的话很少有群面,少部分企业可能会有一个交叉面,不过总的来说,技术面基本就是考察你的专业技术水平的,hr面的话主要是看这个人的综合素质以及家庭情况符不符合公司要求,一般来讲,技术的话只要通过了技术面hr面基本上是没有问题(也有少数企业hr面会刷很多人)
我们主要来说技术面,技术面的话主要是考察专业技术知识和水平,上面也是我整理好的精选面试题。

加油吧,测试人!如果你需要提升规划,那就行动吧,在路上总比在起点观望的要好。事必有法,然后有成。

资源不错就给个推荐吧~

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

论python自动化测试(3)- 自动化框架及工具 的相关文章

  • 软件测试/测试开发全日制培训|Pytest的异常处理

    前言 在断言一些代码块或者函数时会引发意料之中的异常或者其他失败的异常导致程序无法运行时 使用 raises 捕获匹配到的异常可以让代码继续运行 Python的异常处理 try except else finally 示例如下 try pr
  • 外包干了2个月,技术退步明显...

    先说一下自己的情况 大专生 18年通过校招进入武汉某软件公司 干了接近4年的功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了2年的女朋友
  • Jmeter 性能压测 —— 常遇问题与解决技巧!

    问题1 如何在大并发测试下 让登录或者后续接口只执行一次 分析 这个问题网上的答案其实很多 但是大多不靠谱 比如推荐使用仅一次控制器 但是仅一次控制器对线程组无效 比如推荐跨线程组调用 但是这样比较繁琐 新人也搞不定 其实只要各位对元件熟悉
  • 软件测试基础知识+面试题总结

    一 什么是软件 软件是计算机系统中的程序和相关文件或文档的总称 二 什么是软件测试 说法一 使用人工或自动的手段来运行或测量软件系统的过程 以检验软件系统是否满足规定的要求 并找出与预期结果之间的差异 说法二 软件测试就是利用一定的方法对软
  • 9个最受欢迎的开源自动化测试框架盘点

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 自动化测试框架可以帮助测试人员评估多个Web和移动应用程序的功能 安全性 可用性和可访问性 尽管团队可以自己构建复杂的自动化测试框架 但是当他们可以使用
  • 外包干了2个月,技术退步明显...

    先说一下自己的情况 大专生 18年通过校招进入武汉某软件公司 干了接近4年的功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了2年的女朋友
  • 最佳利用Mock提升测试效率的7个技巧!

    再聊这个问题之前 我们先了解一下公司技术架构的演变过程 这样我们才能真正体会到我们为什么要使用 Mock功能 单体应用 在早期 大部分公司的应用技术栈主要可以分为两大类 LAMP Linux Apache MySQL PHP 和 MVC S
  • 【Mysql】InnoDB 引擎中的页目录

    一 页目录和槽 现在知道记录在页中按照主键大小顺序串成了单链表 那么我使用主键查询的时候 最顺其自然的办法肯定是从第一条记录 也就是 Infrimum 记录开始 一直向后找 只要存在总会找到 这种在数据量少的时候还好说 一旦数据多了 遍历耗
  • ASTM D6147测定压缩情况下硫化橡胶和热塑弹性体作用力衰减 (应力松弛) 的标准试验方法

    标准名称 ASTM D6147 Standard Test Method for Vulcanized Rubber and Thermoplastic Elastomer Determination of Force Decay Stre
  • 软件测试/测试开发/全日制/测试管理丨Python关键字

    Python 语言有一些关键字 它们具有特殊的含义 不能被用作标识符 变量名 函数名等 False 布尔类型的假值 None 表示一个空对象或无值 True 布尔类型的真值 and 逻辑与操作符 as 用于给导入的模块起别名 assert
  • 2种方法,教你使用Python实现接口自动化中的参数关联

    通常在接口自动化中 经常会参数关联的问题 那么什么是参数关联 参数关联就是上一个接口的返回值会被下一个接口当做参数运用 其中Python中可以实现参数关联的方法有很多种 今天小编给大家介绍下 如何通过Python来实现接口自动化中的参数关联
  • 测试工程师能否作为一份「终身职业」?30岁+怎么办?

    讨论 测试工程师可否作为一份终生的职业 这是我在论坛看到的一个讨论 你的答案是什么呢 我希望大家能认真思考后给出一个属于自己的答案 无论你是新手入门 还是资深专家 回答这个问题请不要凭一腔热血 也不用过分消极 别总和钱挂钩 平心而论即可 就
  • 测试开发必知:有Tomcat,为什么还要Nginx?

    只用Tomcat 不用Nginx搭建Web服务 行不行 我曾经提出的愚蠢问题 今天详细给自己解释下 为什么必须用Nginx 不用Nginx 只用Tomcat的Http请求流程 浏览器处理一个Http请求时 会首先通过DNS服务器找到域名关联
  • 微信小程序的自动化测试框架

    微信发布了小程序的自动化测试框架Minium 提供了多种运行验证方式 其特点 支持一套脚本 iOS Android 模拟器 三端运行 提供丰富的页面跳转方式 看不到也能去得到 可以获取和设置小程序页面数据 让测试不止点点点 可以直接触发小程
  • 新入职一个00后卷王,每天加班到2点,太让人崩溃了····

    在程序员职场上 什么样的人最让人反感呢 是技术不好的人吗 并不是 技术不好的同事 我们可以帮他 是技术太强的人吗 也不是 技术很强的同事 可遇不可求 向他学习还来不及呢 真正让人反感的 是技术平平 却急于表现自己的人 每天加班到12点 在老
  • 软件测试|web自动化测试神器playwright教程(三十八)

    简介 在我们使用selenium时 我们可以获取元素的属性 元素的文本值 以及输入框的内容等 作为比selenium更为强大的web自动化测试神器 playwright也可以实现对元素属性 文本值和输入框内容的抓取 并且实现比seleniu
  • 软件测试中的白盒测试,这些技巧你知道吗?

    对于很多刚开始学习软件测试的小伙伴来说 如果能尽早将黑盒 白盒测试弄明白 掌握两种测试的结论和基本原理 将对自己后期的学习有较好的帮助 今天 我们就来聊聊黑盒 白盒测试的相关话题 1 黑盒测试的方法和小结 最常见黑盒测试方法包括 边界值 等
  • 甜蜜而简洁 —— 深入了解Pytest插件pytest-sugar

    在日常的软件开发中 测试是确保代码质量的关键步骤之一 然而 对于测试报告的生成和测试结果的可读性 一直以来都是开发者关注的焦点 Pytest插件 pytest sugar 以其清晰而美观的输出 为我们提供了一种愉悦的测试体验 本文将深入介绍
  • 外包干了2个月,技术倒退2年。。。

    先说一下自己的情况 本科生 20年通过校招进入深圳某软件公司 干了接近4年的 功能测试 今年国庆 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了3年的女朋
  • Web自动化测试 —— cookie复用

    一 cookie简介 cookie是一些数据 存储于用户电脑的文本文件中 当web服务器想浏览器发送web页面时 在链接关闭后 服务端不会记录用户信息 二 为什么要使用Cookie自动化登录 复用浏览器仍然在每次用例开始都需要人为介入 若用

随机推荐

  • Myeclipse10下载,安装,破解,插件,优化介绍(CSDN首发)

    一 Myeclipse10下载与破解 Genuitec公司发布了MyEclipse 10 一款Genuitec旗下的商业化Eclipse集成开发工具的升级版本 MyEclipse 10基于Eclipse Indigo构建 为Java和Jav
  • TOMCAT的SERVER.XML的详细说明

    Example Server Configuration File gt
  • 如何让div靠右_div向右偏移设置 css让div靠右移一定距离

    转自 https www thinkcss com shili 1372 shtml div对象盒子向右偏移设置 使用css让div靠右一定距离 div向右移教程实例篇 div向右偏移一定距离 可采用margin外边距实现 也可以使用pad
  • 史上最全的自动驾驶研究报告(上)

    https www jianshu com p b85a982ad4c8 自动驾驶是百年汽车工业史上又一次伟大的范式转移 将重新定义汽车产业规则 汽车的产品定义将不再是 行走的精密仪器 也不只是一台 行走的计算机 而是 行走的第三空间 车厂
  • RAM明明断电会丢失数据,为什么初始化的全局变量存储在RAM?详细分析程序的存储

    前言 1 之前因为一个字符指针和字符数组指针引发的bug 折磨了我一个下午才发现问题 之后我就打算研究一下系统是如何发现野指针乱访问问题 后面就一直深入到微机系统中的内存管理了 2 这些其实都是基础知识 只不过我一直不太明白 所以在此记录一
  • Flink架构

    1 Flink 任务提交流程 TaskManager是一个独立的jvm进程 每个task slot表示TaskManager拥有资源的一个固定大小的子集 假如一个TaskManager有三个slot 那么它会将其管理的内存分成三份给各个sl
  • 使用cobra创建cli命令行工具

    什么是cobra Cobra既是用于创建强大的现代CLI应用程序的库 也是用于生成应用程序和命令文件的程序 Cobra是一个库 提供了一个简单的界面来创建类似于git go工具的强大的现代CLI界面 Cobra也是一个应用程序 它将生成您的
  • Dcat-admin 重写底部版权内容

    Dcat admin 重写底部版权内容 背景 使用 deploy 自动发布项目 无法直观知道发布成功与否 想到可在版权代码位置 添加更新时间来解决该问题 原理 已知 Dcat admin 加载布局文件时候 优先加载 resources vi
  • spring aop @Pointcut语法详解

    转载 https blog csdn net qq 26860451 article details 100554377
  • 各种UI库使用总结

    各种UI库使用总结 工作了这么年 使用了一些UI库 简单的总结一下 UI库也是五花八门 根据自己的产品 应用场景吧 没有绝对合适的 各有各的应用场景吧 QT 这几年前后在一些嵌入式上使用过QT来做为开发 有带UI及不带UI界面的 版本的基本
  • 基于51单片机的羽毛球计分器(含Keil程序和Proteus文件)

    系统概述 系统使用的模块有AT89C51单片机 LCD1602显示屏 矩阵键盘 蜂鸣器 整个羽毛器计分器内的比赛双方的比赛分数和比赛时间和节数等都会在LCD1602显示屏上进行显示 通过左侧的按键可以增加双方的分数 还可以控制比赛的开始和暂
  • 寻找最大整数——从键盘输入四个整数,找出其中的最大值并将其输出

    问题描述 从键盘输入四个整数 找出其中的最大值并将其输出 输入说明 输入4个整数 用空格分隔 输出说明 输出值最大的一个整数 输入样例 25 99 46 0 输出样例 99 include
  • 编程实现朴素贝叶斯分类算法

    from sklearn datasets import load iris iris load iris from sklearn naive bayes import GaussianNB 高斯分布型 gnb GaussianNB 构造
  • Chapter4 Duality theory对偶理论--Introduction to linear optimization

    组会讲稿 传到这里分享下
  • 未名湖边的烦恼 蓝桥杯

    问题描述 每年冬天 北大未名湖上都是滑冰的好地方 北大体育组准备了许多冰鞋 可是人太多了 每天下午收工后 常常一双冰鞋都不剩 每天早上 租鞋窗口都会排起长龙 假设有还鞋的m个 有需要租鞋的n个 现在的问题是 这些人有多少种排法 可以避免出现
  • 前端配置跨域代理

    跨域时对于前后端开发中一个非常常见的问题 当我们客户端向我们的服务器请求接口数据的时候 我们可以请求到服务器当中的数据 但是我们把数据返回我们的客户端的时候就会产生跨域问题 所以 跨域是针对我们浏览器设置一个安全策略 就是当我们的协议 域名
  • Handler processing failed; nested exception is java.lang.NoClassDefFoundError

    在使用阿里云发送短信接口时出现此错误 原因是springmvcjar包和阿里云jar包出现冲突 建议使用下面两个版本
  • 【工具】VirtualBox虚拟机安装Windows操作系统

    前面的文章中介绍了VirtualBox虚拟机的安装 VirtualBox虚拟机中如何安装操作系统 是本文的重点 下面将进行详细介绍 使用VirtualBox虚拟机安装Windows操作系统有很多好处 主要包括以下几点 节省资源 通过虚拟化技
  • Spring Boot将声明日志步骤抽离出来做一个复用类

    上文Spring Boot日志基础使用 设置日志级别中我们写了个比较基本的日志操作 但也随之产生了一个问题 我们这行代码 能不能不写 具体说 我们不希望每个需要日志的类都声明一个在这 看着太不美观了 我们最简单方法当然是继承 我们找个目录创
  • 论python自动化测试(3)- 自动化框架及工具

    python自动化测试 3 自动化框架及工具 1 概述 手续的关于测试的方法论 都是建立在之前的文章里面提到的观点 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍