当前位置: 首页 > news >正文

Web自动化测试:测试用例断言!

运行测试用例时,需要判断用例是否执行成功,此时需要有一个我们期望的结果来进行验证。这里unittest中,如果一个case执行的过程中报错,或者我们判断结果不符合期望,就会判定此条用例执行失败,判断的条件主要是根据断言来实现,这节主要学习下断言的使用。

一、断言的方法

1.1 TestCase类中的部分断言方法

判断条件是否成立

assert_(expr,msg)

  • expr:判断条件,返回Boolean值
  • msg:判断失败后显示的信息

判断两个数据的值是否相同

assertEqual(first,second,msg)

  • first:第一个数据
  • second:第二个数据
  • msg:判断失败后显示的信息

判断两个数据的值是否不相同

assertEqual(first,second,msg)

  • first:第一个数据
  • second:第二个数据
  • msg:判断失败后显示的信息

判断条件是否为真

assertTrue(expr,msg)

  • expr:判断条件
  • msg:判断失败后显示的信息

判断条件是否为假

assertFalse(expr,msg)

  • expr:判断条件
  • msg:判断失败后显示的信息

判断两个数据是否相同

assertIs(first,second,msg)

  • first:第一个数据
  • second:第二个数据
  • msg:判断失败后显示的信息

判断两个数据是否不相同

assertIsNot(first,second,msg)

  • first:第一个数据
  • second:第二个数据
  • msg:判断失败后显示的信息

判断数据是否存在

assertIsNone(obj,msg)

  • obj:所传的数据
  • msg:判断失败后显示的信息

判断数据是否不存在

assertIsNotNone(obj,msg)

  • obj:所传的数据
  • msg:判断失败后显示的信息

判断数据a是否包含在数据b中

assertIn(a,b,msg)

  • a:数据a
  • b:数据b
  • msg:判断失败后显示的信息

判断数据a是否不包含在数据b中

assertNotIn(a,b,msg)

  • a:数据a
  • b:数据b
  • msg:判断失败后显示的信息

1.2 直接使用assert断言

习惯直接使用python中的assert断言,替代unittest.TestCase中的断言方法:

具体可以直接使用:

assert a == b

assert a != b

assert a in b

assert a not in b

assert a in None

assert a in not None

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

二、在框架中使用断言

由于在使用unittest中,每个类都继承了unittest.TestCase,所以使用时,直接在方法里使用self来调用断言方法。

import unittestclass Demo(unittest.TestCase):def test_01(self):self.assertEqual("demo","demo","两者不相等")

如果直接使用assert断言,则可以直接调用。

import unittestclass Demo(unittest.TestCase):def test_01(self):assert "demo" == "demo"

三、实例演示

这里使用百度贴吧的例子,第一个case是打开新页面,然后判断新页面的title是否是我们期望的,第二个case则是我们故意判断一个错误的title,使得断言失败,这两个case也分别使用上述的两种断言方法。

# -*- coding:utf-8 -*-
from selenium import webdriver
import unittest
from time import sleepclass PcLogin(unittest.TestCase):@classmethoddef setUpClass(cls):print("所有测试开始")def setUp(self):print("测试开始")self.driver = webdriver.Chrome()self.driver.implicitly_wait(30)self.driver.set_page_load_timeout(30)self.driver.get("https://tieba.baidu.com/")def test_01_demo(self):"""打开新页签"""self.driver.find_element_by_css_selector("a[title = '娱乐明星']").click()all = self.driver.window_handlesself.driver.switch_to.window(all[1])sleep(5)assert self.driver.title == "娱乐明星_百度贴吧", "断言失败,当前页面title是%s " % self.driver.titledef test_02_demo2(self):"""判断首页标题"""# 这个例子会断言失败self.assertEqual(self.driver.title, "娱乐明星_百度贴吧")def tearDown(self):print("测试完成")self.driver.close()@classmethoddef tearDownClass(cls):print("所有测试结束")if __name__ == '__main__':unittest.main()

运行结果:(运行了两条用例,其中失败了一条;符合我们预期的结果)

所有测试开始
测试开始
测试完成
.测试开始
测试完成
F
======================================================================
FAIL: test_02_demo2 (__main__.PcLogin)
判断首页标题
所有测试结束
----------------------------------------------------------------------
Traceback (most recent call last):File "D:/1git/uitest/test_case/demo.py", line 30, in test_02_demo2self.assertEqual(self.driver.title, "娱乐明星_百度贴吧")
AssertionError: '百度贴吧——全球最大的中文社区' != '娱乐明星_百度贴吧'
- 百度贴吧——全球最大的中文社区
+ 娱乐明星_百度贴吧
----------------------------------------------------------------------
Ran 2 tests in 35.273sFAILED (failures=1)Process finished with exit code 1

好了各位,以上就是这篇文章的全部内容了,能看到这里人啊,都是人才。
如果这个文章写得还不错,觉得我有点东西的话 求点赞 👍求关注 ❤️求分享 👥 对耿男我来说真的非常有用!!!
白嫖不好,创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

相关文章:

Web自动化测试:测试用例断言!

运行测试用例时,需要判断用例是否执行成功,此时需要有一个我们期望的结果来进行验证。这里unittest中,如果一个case执行的过程中报错,或者我们判断结果不符合期望,就会判定此条用例执行失败,判断的条件主要…...

基于SSM的培训学校教学管理平台的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...

2019年亚太杯APMCM数学建模大赛A题基于图像分析的二氧化硅熔化表示模型求解全过程文档及程序

2019年亚太杯APMCM数学建模大赛 A题 基于图像分析的二氧化硅熔化表示模型 原题再现 铁尾矿的主要成分是二氧化硅,而二氧化硅是铁尾矿成分中最难熔化的部分。因此,铁尾矿的熔融行为可以用二氧化硅的熔融行为来表示。然而,高温熔池的温度超过…...

C++之继承<2>【详解】

C之继承<2>【详解】 1. 派生类的默认成员函数1.1 1. 构造成员函数1.2 拷贝复制1.3 构造函数和析构函数的执行顺序 2. 继承和友元3. 继承与静态成员 1. 派生类的默认成员函数 1.1 1. 构造成员函数 派生类的构造函数必须调用基类的构造函数初始化基类的那…...

解决Kafka新消费者组导致重复消费的问题

问题描述:在使用Kafka时,当我们向新的消费者组中添加消费者时,可能会遇到重复消费的问题。本文将介绍一些解决这个问题的方法,帮助开发者更好地处理Kafka中的消费者组和消费偏移量。 Kafka是一个强大的分布式消息队列系统&#xf…...

公允价值会计(fair-value accounting)

《公允价值会计》是2008年经济科学出版社出版图书。 公允价值会计又称市值会计,是指以市场价值或未来现金流量的现值作为资产和负债的主要计量属性的会计模式。随着现代交通和通讯技术的发展,在工业社会中相互分割的市场正在走向世界一体化,…...

【java调取第三方接口,获取数据并保存至数据库】

java调取第三方接口,获取数据并保存至数据库 Overridepublic void doPost() {// 创建Httpclient对象CloseableHttpClient httpClient HttpClients.createDefault();CloseableHttpResponse response null;String resultString "";String url "htt…...

图论01-【无权无向】-图的基本表示-邻接矩阵/邻接表

文章目录 1. 代码仓库2. 图的基本表示的比较3. 邻接矩阵:Array和TreeSet3.1 图示3.2 Array主要代码解析3.3 测试输出3.4 使用TreeSet的代码 4. 邻接表:LinkedList4.1 图示4.2 LinkedList主要代码解析4.3 测试输出 5. 完整代码5.1 邻接表 - Array5.2 邻接…...

Bootstrap的列表组相关知识

目录 01-列表组的相关基础知识02-一个简单的列表组示例03-激活或禁用列表组的一行或多行04-设置列表项的颜色05-给列表项添加徽章 01-列表组的相关基础知识 Bootstrap的list-group是一个用于创建列表组件的CSS类,通常用于显示一个项目列表,如导航菜单或…...

Linux简单安装ffmpeg 实现用PHP压缩音频

一、下载安装 1、官方下载地址:Download FFmpeg 2、下载完上传到服务器然 然后解压就算安装完成了 tar -xf ffmpeg-git-amd64-static.tar.xz 3、然后配置一下全局变量(当然也可以不用配置 使用的时候带上文件路径就行) cd /usr/bin ln -s…...

Vue解决 npm -v 报错(一)

报错内容: npm WARN config global --global, --local are deprecated. Use --locationglobal instead. 解决方案: 代码: prefix -g 替换为: prefix --locationglobal 原创作者:吴小糖 创作时间:2023.1…...

IP地址是如何定位的

IP地址定位原理和方法 在互联网时代,了解设备或用户的地理位置对于各种应用和服务至关重要,从广告定向到网络安全。IP地址定位是一种常用的方法,允许确定IP地址背后的实际地理位置。本文将介绍IP地址定位的原理和方法。 IP地址基础&#xf…...

【分布式】入门级NCCL多机并行实践 - 02

# 背景知识 大模型和分布式训练对数据的吞吐量以及并行度都有很高的要求,NCCL就是在这个背景下诞生的。 如果你是一个只会写写Python,调用PyTorch和Horovod的算法萌新,可能对于分布式底层的东西不太了解,在下岗热潮中被主管逼着…...

Rust的模式匹配

文章目录 match匹配if let匹配 match匹配 match可以结合枚举使用,例如 enum IpVersion {V4,V6, }fn ParseIpVersion(version: IpVersion) -> String {match version {IpVersion::V4 > String::from("ipv4"),IpVersion::V6 > String::from(&quo…...

操作系统【OS】虚拟机

定义 使用虚拟化技术,将一台物理机器虚化为多台虚拟机器VM,每个虚拟机器都可用独立运行一个操作系统 分类 传统计算机 第一类VMM 第二类VMM...

不写代码、构建一个开源的 ChatGPT,总共需要几步?|Hugging News #1020

每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息&#xff0…...

VBA操作数据库

相关背景: 对于数据分析同学,一般SQL,EXCEL是必备技能,但对于VBA和Python可能有的同学不会;在处理本地数据上(诸如excel、txt|csv文本),后续尝试使用VBA或者Python写一个sql查询的GUI界面&…...

【华为OD机试】HJ26 字符串排序

描述 编写一个程序,将输入字符串中的字符按如下规则排序。 规则 1 :英文字母从 A 到 Z 排列,不区分大小写。 如,输入: Type 输出: epTy 规则 2 :同一个英文字母的大小写同时存在时,…...

哈里斯鹰算法优化BP神经网络(HHO-BP)回归预测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

摆动序列【贪心4】

题目 分析 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {if(nums.size() < 2) return nums.size();int ret 0,left 0,right 0;for(int i 0;i < nums.size()-1;i){right nums[i1] - nums[i];if(right 0) continue;if(left …...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...