Web自动化测试框架实战-基于unittest

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

随着自动化脚本数量的增加,用例及测试数据的组织和维护,公共模块的复用,用例挑选及执行控制,或者团队协作及用例编写规范化,我们便需要引入自动化测试框架。
框架是应用的组织架构,一般包含代码、配置、数据、日志、依赖的组织,可复用模块的抽取以及运行控制等。就像从一盘散沙的武装人员,到一个军队。框架是由脚本集合发展到应用(包含测试项目)的一种必然选择。
框架的基本功能一般包括:

  • 代码、配置文件、数据文件等的分类组织。
  • 依赖管理。
  • 公共模块的复用。
  • 运行流程及控制。

另外,从设计目标来看,框架应该具有易用、健壮稳定、良好的性能,通过配置或参数提供灵活的使用方式,以及易调试和维护(如提供运行日志)等特性。
测试框架是为测试而设计的框架。测试框架一般还要包含用例编写、丰富的断言方法、用例组织、测试准备和清理方法、执行测试、生成测试报告等功能。
相比于一堆脚本集合,测试框架一般具有以下优点。

  • 用例执行互相独立,一个用例失败不影响其他用例执行和验证。
  • 清晰的用例执行状态,如成功、失败、出错、跳过等以及系统的测试报告。
  • 灵活的用例挑选及批量运行。
  • 提供丰富的断言(期望结果与实际结果的对比)方法。
  • 提供不同范围的测试准备和清理方法。
  • 在特定环境不满足条件时,跳过用例。

Python中常用的测试框架有Unittest、Nose、Pytest以及Robot Framework等。其中Unittest是Python自带的测试框架,提供基础的用例管理和测试控制功能,使用灵活易于定制。本章以unittest及Selenium为基础来讲解Web自动化测试框架的搭建流程。Pytest和Robot Framework将在其他章进行讲解。

9.1 Unittest基本使用#

Unitest是Python自带的单元测试框架,依照JUnit编写,和其他语言的的主流单元测试框有着相似的风格。Unittest中主要包含TestCase测试用例、TestSuite测试套件、TestFixture测试准备及清理方法和TestRunner测试运行器等主要概念,另外还包含TestLoader用于批量加载用例生成测试套件,TestResult用于在TestRunner中记录测试结果。Unittest的模型关系及运作流程如图9.1所示。


图9.1 Unittest模型关系及运作流程

编写测试用例时,需要编写一个类(一般约定以Test开头),并继承unittest.TestCase。每个测试类包含测试方法(测试用例)及TestFixture测试准备和清理方法两部分。测试方法一般约定为名称已test开头(测试类中非已test开头的方法不作为用例执行,一般可以用作辅助步骤等)。每个测试方法在执行时会实例化为一个TestCase对象来运行。同时测试用例父类unittest.TestCase中提供了丰富的断言(测试对比)方法来验证结果。

TestFixture也译做测试脚手架或者测试夹具。包含setup测试准备和teardown测试清理两类方法,分别在用例执行前执行和用例执行后执行,像三明治的两片面包一样将我们的正菜测试用例夹在其中。TestFixture提供不同范围的测试准备和清理,包含测试用例级、测试类级和测模块级。

TestSuite测试套件用来挑选和组织用例。除了使用测试套件自带的addTest添加用例方法添加用例外,还可以使用TestLoader用例加载器对象来批量添加一个测试模块、一个测试类等快速生成一个测试套件对象。同时测试套件支持嵌套,执行时按用例及子套件添加顺序进行深度遍历执行。

TestRunner用于测试套件、其中的用例各个级别的TestFixture的运行控制及异常处理。TestRunner中包含一个TestResult对象,穿梭于各个用例及套件中记录并实时输出结果。

用例编写#

Unittest测试用例编写一般应遵循以下步骤。
(1)测试脚本(测试模块)约定以test开头。
(2)测试类约定以Test开头,并继承unittest.TestCase。
(3)测试方法(测试用例)约定以test开头,可以包含多个步骤,及多个断言。

注意:测试类中不应覆盖父类的__init__方法,否则会破坏Unittest将每个测试方法生成测试用例对象的过程。

测试类TestCase#

测试类编写示例如下。

 

Copy

import unittest class TestDemo(unittest.TestCase): """测试类示例""" def add(self, a, b): # 非test开头不作为用例 ​ return a + b def test_add_int(self): ​ """测试整数相加""" # 使用docstring进行用例描述 ​ s = self.add(1, 2) ​ self.assertEqual(s, 3) # 实际结果, 期望结果 def test_add_float(self): ​ """测试浮点数相加""" ​ s = self.add(10000.1, 0.1) ​ self.assertEqual(s, 10000.2) def test_add_str(self): ​ """测试字符串相加""" ​ s = self.add('10', '1') ​ self.assertEqual(s, '11') if __name__ == '__main__': unittest.main()

上例测试类中的add方法非test开头,不作为用例运行,一般测试类中的非测试方法可以作为辅助步骤供测试方法调用。
测试方法可以使用docstring(一对三个双引号中间的字符串),来提供用例描述。用例描述会详细模式下显示。
self.assertEqual(s,3)是父类unittest.TestCase提供的一种断言方法,用于断言相等。在用例中也可以直接使用Python自带的assert语句,如assert s==3。但是相比来说使用TestCase类提供的断言方法,在失败信息中可以查看到更清晰的结果对比。
if __name__ == '__main__'表示如果本模块独立执行(非其他模块调用),unittest.main()为当前脚本提供一个命令行接口(支持多种运行参数),在运行脚本时默认运行当前测试模块按约定规则(测试类以Test开头,测试方法以test开头)所能发现的所有用例。
执行脚本,运行结果如下。

 

Copy

..F ====================================================================== FAIL: test_add_str (__main__.TestDemo) 测试字符串相加 ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/superhin/Desktop/test_demo.py", line 22, in test_add_str self.assertEqual(s, '11') AssertionError: '101' != '11' - 101 ? - + 11 ---------------------------------------------------------------------- Ran 3 tests in 0.001s FAILED (failures=1)

最上面的“..F”表示,前两条用例通过

Python+Selenium+Unittest搭建Web UI自动化测试框架实战指南 软件测试是保障软件质量的关键环节,其核心原理是通过设计并执行测试用例来验证软件功能是否符合预期。随着敏捷开发和DevOps的普及,自动化测试技术因其高效、可重复执行的特点,成为提升测试效率和软件交付质量的重要实践。在Web应用测试领域,UI自动化测试能够模拟真实用户操作,对业务流程进行端到端验证,具有极高的技术价值。它广泛应用于回归测试、冒烟测试和核心业务流程验证等场景,能有效解放人力,让测试工程师专注于更复杂的探索性测试。本文聚焦于使用Python、Selenium和Unittest这一经典技术组合,从零 阅读详情

相关推荐

POM模式实战Python+Unittest构建可维护的Web自动化测试框架

在软件测试领域,自动化测试是提升效率和保障质量的关键技术。其核心原理是通过脚本模拟用户操作,对软件功能进行验证。页面对象模型(POM)作为一种经典的设计模式,通过将Web页面抽象为类,封装元素定位与操作,极大地提升了自动化脚本的可维护性和复用性。这一模式的技术价值在于实现了测试代码与UI元素的解耦,使得当页面结构变化时,只需修改一处代码,从而显著降低维护成本。在Web应用测试、持续集成等应用场景中,POM模式结合PythonUnittest框架,能够构建出结构清晰、易于扩展的测试体系。本文以蓝桥杯Web

weixin_28676289的博客 311

unittest关于setUp()、setUpClass()、tearDown()、tearDownClass()的区别及使用方法

1.setUp():每个测试用例方法执行前,都会运行一次 tearDown():每个测试用例方法执行结束后,都会运行一次 class case(unittest.TestCase): def setUp(self): print("test case start") def tearDown(self): print("test case end") 2.setUpClass():每个测试用例类执行前,执行一次;与@classmethod配合使用 tearDownClass(

Lily55_Li的博客 1397

Python WEB 自动化测试实战篇⑪〗- 实战 - 利用 unittest 框架设计应用改写脚本

ok,接着上一章节。我们要将上一章节的脚本变为使用 "unittest" 框架来进行设计,其实就是将原来接口自动化测试学习的部分内容拿过来,到UI自动化测试里面进行一些复用。

易编橙 · 终身成长社群,相遇已是上上签! 4万+

Unittest测试框架以及使用方法

1.Untitest基本概念 2.unittest的书写规则 3.测试用例执行顺序 4..断言 5.跳过测试 6.测试套件 7.ddt 数据驱动 8.HTMLTestRunner报告

wangyao__1997的博客 1543

unittest自动化测试框架讲解以及实战_unittest框架实际应用

loader = unittest.TestLoader() # 创建一个加载对象file)) # 文件路径。

2401_84254451的博客 1075

unittest中的setUpClass()与tearDownClass()中对象的运用

注意:setUpClass(cls)与tearDownClass(cls): 在写的时候后边括号内时cls 而不是self。如果想要函数内的变量在 类中使用的话 前边需加cls import unittest from selenium import webdriver from time import sleep class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): # 创建web服务

weixin_43794119的博客 1402

使用unittest测试框架进行web自动化测试

unittest框架可以组织执行测试用例,并且提供丰富的断言方法来判断测试用例是否通过,生成测试报告。 一、unittest框架属性 1、unittest常用属性如下: TestCase、TestSuite、TextTestRunner、TestLoader、main、defaultTestLoader、skip unittest.TestCase:TestCase类,所有测试用例类都继承该类,eg: class SearchResource(unittest.TestCase): pa

qq_42466270的博客 1330

selenium3 web自动化测试框架——Unittest介绍及项目实战中的运用

下例演示用例的运行 # -*- coding:utf-8 -*- import unittest from selenium import webdriver from business.register_business import RegisterBusiness class TestLoginPage(unittest.TestCase): @classmethod def setUpClass(cls): print("所有步骤前置操作(测试计划):测试计划

Asaasa1的博客 382

Python+Selenium+unittest+ddt构建可维护Web自动化测试框架实战

自动化测试是现代软件工程中提升测试效率、保障软件质量的关键实践。其核心原理是通过脚本模拟用户操作,自动执行测试用例并验证结果,从而将测试人员从重复性劳动中解放出来,实现快速回归验证。在Web自动化测试领域,Selenium作为行业标准工具,通过WebDriver协议实现对浏览器的精准操控。结合Python语言简洁的生态、unittest测试框架的组织能力以及ddt库的数据驱动特性,能够构建出结构清晰、易于维护的自动化测试解决方案。这种技术组合的价值在于显著提升了测试用例的编写效率和可维护性,尤其适用于需要频

weixin_34342207的博客 346

Web UI自动化测试unittest框架入门指南

Web UI自动化测试是一种通过编写脚本来自动化的执行用户界面交互操作,以验证Web应用功能正确性的技术。与传统的手动测试相比,自动化测试能够极大地提升测试效率和频率,缩短测试周期,减少人为错误,提高软件质量。持续集成是一种开发实践,要求开发者频繁地(可能是每天多次)将代码集成到主干。每次代码集成都会通过自动化构建(包括编译、发布、自动化测试)来验证,从而尽早地发现集成错误。unittestPython 的标准库之一,用于创建和运行测试用例,该框架基于 xUnit 框架的结构。

weixin_35756130的博客 1097

unittest 多个测试文件只开一次浏览器_selenium3 web自动化测试框架Unittest介绍及项目实战中的运用...

unittest在自动化中的基础使用 下例演示用例的运行# -*- coding:utf-8 -*- import unittest from selenium import webdriver from business.register_business import RegisterBusiness class TestLoginPage(unittest.TestCase): ...

weixin_39610415的博客 165

unittest框架总结

原文地址:http://www.cnblogs.com/yufeihlf/p/5707929.html     unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。今天笔者就总结下如何使用unittest单元测试框架来进行WEB自动化测试。 目录

dubinglin的博客 1958

都说Pytest框架Unittest好用太多,你信吗?

前言 大家都知道Python有自带的单元测试框架unittest,那为什么还要学习Pytest呢?先了解下Pytest优点 pytest: pytest是一个非常成熟的全功能的Python测试框架,是unittest框架的扩展,主要特点有以下几点: 1、简单灵活,非常方便的组织自动化测试用例; 2、支持参数化,可以细粒度地控制要测试的测试用例; 3、能够支持简单的单元测试和复杂的功能测试,比如web端selenium/移动端appnium等自动化测试、request接口自动化测试 4...

学历是帮一个人争取机会 | 能力是帮一个人把握机会 1899

Selenium3与Python3实战 Web自动化测试框架(二)

Selenium3与Python3实战 Web自动化测试框架 一、项目实战中PO模型的设计与封装  一般将所有的元素、数据都放在代码中,并不利于自动化代码的维护。最好的方式是尽量把数据、页面、操作进行分离开:PO设计模式  PO设计模式的优势: PO提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变得更加清晰。 页面对象与用例分离,使得我们更好的复用对象。 可复...

weixin_30642029的博客 415

Selenium3与Python3实战Web自动化测试框架

本章对课程做整体介绍,通过讲解web自动化测试需要掌握的知识,到web自动化测试框架的选择,框架的搭建。展开列表本章介绍unittest在注册实战中的具体用法(setup、setupclass、skip等api;Case的执行顺序以及批量执行Case、断言的使用),以及unittest在注册实战中的进阶使用:管理case,生成测试报告和重构报错截图。展开列表本章引入数据驱动,丰富测试数据,从多维度去设计测试数据,然后通过不同的数据用po模型的方式去跑case,达到完善框架的效果。展开列表。

niwoxiangyu的博客 350

如何使用 Python 进行自动化测试

我们使用了 unittest、pytest、Selenium 和 requests 等工具,并通过一个实战案例展示了如何自动化测试一个简单的Web应用。相比手动测试,自动化测试可以提高测试效率,减少人为错误,加快开发周期。运行这段代码,你会看到浏览器自动打开Google首页,输入搜索词并提交搜索,最后验证搜索结果是否包含“Python自动化测试”。

OKCRoss的博客 977

Selenium3自动化测试【36】单元测试Unittest(1)

unittestPython标准库中自带的单元测试框架unittest可以组织执行测试用例,并且提供了丰富的断言方法,可以判断测试用例是否通过,最终生成测试结果。用uinittest单元测试框架可以进行web自动化测试

探索之家 934
上一篇: 2022全网最新抓包工具charles的使用 入门到精通
下一篇: Selenium+Pytest自动化测试框架实战
软测小达人
博客等级 码龄5年 1490粉丝 74原创
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值