测试教程网.unittest教程.5. 实例: 找出所有是弱密码的用户
From: http://www.testclass.net/pyunit/test_example_3/
背景
当我们的测试数据是下面这些的时候,我们的用例是有问题的。
[
{"name":"jack","password":"Iloverose"},
{"name":"rose","password":"Ilovejack"},
{"name":"tom","password":"password123"},
{"name":"jerry","password":"password"}
]
我们的用例只能找出tom是弱密码的用户,jerry这个用户会成为漏网之鱼。
为什么
这是因为在unittest中,一旦某个测试方法中的断言失败,后续的断言都不会被执行。
还原一下上面的例子,当用例在断言tom失败后,for循环就退出了,测试方法也执行完毕了,后面jerry这条数据就不会被断言。
怎么办
我们可以重构一下我们的用例,让整个用例只断言1次,断言失败以后就把弱密码的用户打印出来。
代码
修改user_data.json文件,加入一些测试数据,修改后的user_data.json文件应该是
[
{"name":"jack","password":"Iloverose"},
{"name":"rose","password":"Ilovejack"},
{"name":"tom","password":"password123"},
{"name":"jerry","password":"password"},
{"name":"fred","password":"123456"},
{"name":"elma","password":"654321"}
]
新建test_password_4.py文件,内容如下
import unittest
import json
class WeakPasswordTeseCase1(unittest.TestCase):
@classmethod
def setUpClass(kls):
data_file_path = './user_data.json'
print('before all test methods')
with open(data_file_path) as f:
kls.test_data = json.loads(f.read())
def test_week_password(self):
res = True
msg = []
for data in self.test_data:
passwd = data['password']
tmp_res = True
tmp_res = tmp_res and (len(passwd) >= 6)
tmp_res = tmp_res and (passwd != 'password')
tmp_res = tmp_res and (passwd != 'password123')
if not tmp_res:
msg.append("user %s has a weak password %s" %(data['name'], data['password']))
res = res and tmp_res
self.assertTrue(res, "\n".join(msg))
def test_dummy(self):
pass
if __name__ == '__main__':
unittest.main()
运行及结果
在命令行中运行python test_password_4.py,结果如下
$ python test_password_4.py
before all test methods
.F
======================================================================
FAIL: test_week_password (__main__.WeakPasswordTeseCase1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_password_4.py", line 27, in test_week_password
self.assertTrue(res, "\n".join(msg))
AssertionError: user tom has a weak password password123
user jerry has a weak password password
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (failures=1)
我们能学到什么
- 断言一旦失败之后测试方法就会结束运行,所以一般来说1个测试方法推荐只有1个断言
- 如果一个测试方法里面必须要有多个断言,那么要确保前面的断言失败之后,后面的断言就算不运行也不会影响测试的范围和结果
- for循环中的断言一旦失败,for循环就退出了
- 上面演示的测试用例写法其实具备了一定的数据驱动测试的思想
测试教程网.unittest教程.5. 实例: 找出所有是弱密码的用户的更多相关文章
- 测试教程网.unittest教程.3. 实例: 测试弱密码
From: http://www.testclass.net/pyunit/test_example_1/ 背景 考虑这样一个测试弱密码的实例,这个我们在pytest相关教程中也有过描述. 我们需要判 ...
- 测试教程网.unittest教程.4. 实例: 读取测试数据并测试弱密码
From: http://www.testclass.net/pyunit/test_example_2/ 背景 接上一节的弱密码例子,我们的用例尽管运行的不错,但还是有点问题. 假如我们需要增加一些 ...
- 测试教程网.unittest教程.2. 基本用法
From: http://www.testclass.net/pyunit/basic_example/ 我们通过最简单的例子来看一下unittest的基本用法,下面的代码测试了3个python字符串 ...
- 测试教程网.unittest教程.6. 命令行接口
From: http://www.testclass.net/pyunit/commind_line_interface/ 背景 unittest支持命令行接口,我们可以在命令行里指定运行具体的测试用 ...
- 测试教程网.unittest教程.1. 基本概念
From:http://www.testclass.net/pyunit/basic_concept/ unittest是python自带的单元测试框架,有时候又被称为”PyUnit”,是python ...
- 测试教程网.unittest教程.8. 断言异常
From: http://www.testclass.net/pyunit/assert_raise/ 背景 我们有时候需要断言一些方法会抛出异常,这些异常需要符合我们的预期. 代码 新建test_e ...
- 测试教程网.unittest教程.7. 各种断言方法
From: http://www.testclass.net/pyunit/assert/ 背景 unittest支持各种断言方法. 断言列表 官方文档 方法 检查点 assertEqual(a, b ...
- 根据CSV找出USBGroup中计算机对应的用户
<USB.CSV> Hostname,Username CNHZPD-TEST1,User1 CNHZLN-01234567,User2 $group = "CN=Enabl ...
- JVM调优之jstack找出最耗cpu的线程并定位代码
jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多.下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有 ...
随机推荐
- Linux 双网卡双网段通信
/********************************************************************************* * Linux 双网卡双网段通信 ...
- xdoj-1319 求树上任意一点的最大距离----利用树的直径
1 #include <bits/stdc++.h> using namespace std; ; vector < vector <int> > g(N); in ...
- 无用之flask
Oldboy s4 Flask Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收 ...
- Python字符编码转换
编码回顾 在备编码相关的课件时,在知乎上看到一段关于Python编码的回答这哥们的这段话说的太对了,搞Python不把编码彻底搞明白,总有一天它会猝不及防坑你一把.不过感觉这哥们的答案并没把编码问题写 ...
- 简单了解version control
1.什么是版本控制: 版本控制是指对软件开发过程中各种程序代码.配置文件及说明文档等文件变更的管理,是软件管理的核心思想之一 2.版本控制简述 版本控制最主要的功能就是追踪文件的变更.它将什么时候.什 ...
- hdu1875 畅通工程再续 并查集/最小生成树
相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全 ...
- 【BZOJ1878】【SDOI2009】 HH的项链
莫队模板题,比较简单 原题: HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的 ...
- day28Spark
PS:因为Spark是用内存运行 的,非常快 PS: 1.下面就是将conf的spark-env.template改变成spark-env.sh,并添加红色部分 2.修改slaves文件添加从设备 启 ...
- 安装windows系统时遇到的大坑——鼠标键盘没反应
进入安装系统界面时,鼠标键盘没反应,换到其他usb接口也不行 解决方法如下,需要进入bios设置两个地方,设置如下 安装好系统(win7)之后,还遇到了两个问题,一个是驱动没安装,插U盘也没反应,一个 ...
- ethr 微软开源的tcp udp http 网络性能测试工具
ethr 是微软开源的tcp udp http 网络性能测试工具包包含的server 以及 client 我们可以远程测试 同时对于https icmp 的支持也在开发中,tcp 协议支持连接.带宽. ...