ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

unittest 3 实例:测试弱密码,如何测试多组数据

2020-02-10 11:00:12  阅读:268  来源: 互联网

标签:name password123 多组 unittest 用例 测试 test password self


目的

考虑这样一个测试弱密码的实例。

我们需要判断用户的密码中包含简单密码,规则是这样的,密码必须至少6位,满足6位的话判断用户的密码不是password123或者password之类的弱密码。

对于如下的测试数据,我们要如何使用unittest来进行相关测试呢?

[
  {"name":"jack","password":"Iloverose"},
  {"name":"rose","password":"Ilovejack"},
  {"name":"tom","password":"password123"}
]

Test fixture

前文说过,text fixture的主要功能是初始化测试数据或环境以及清理测试数据或环境。

考虑上面的例子,对我们而言,在用例执行之前初始化上面的测试数据是有必要的,我们可以把上面的数据用python的数据结构来表示,比较合适的数据结构是python的字典。这样做有如下的好处

  • 统一初始化一些需要在多个用例之间共享的数据
  • 可以在初始化的时候做一些数据的处理工作,比如过滤一些无效数据等

Test fixture最简单的实现方式是通过自定义下面的2个方法:

  • TestCase.setUp方法在每个测试方法运行之前都会运行一次,适合为每个用例都初始化一遍数据
  • TestCase.tearDown方法在每个测试方法运行之后都会运行一次,适合为每个用例都清理一遍数据

代码

新建名为test_password_1.py的文本文件,输入如下内容

import unittest

class PasswordTestCase(unittest.TestCase):

    def setUp(self):
        print('set up')
        self.test_data = [
            dict(name='jack', password='Iloverose'),
            dict(name='rose', password='Ilovejack'),
            dict(name='tom', password='password123')
        ]

    def test_weak_password(self):
        for data in self.test_data:
            passwd = data['password']

            self.assertTrue(len(passwd) >= 6)

            msg = "user %s has a weak password" %(data['name'])
            self.assertTrue(passwd != 'password', msg)
            self.assertTrue(passwd != 'password123', msg)

    def test_dummy(self):
        pass

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

运行

在命令行里输入 python test_password_1.py来运行用例,结果如下

$ python test_password_1.py
set up
.set up
F
======================================================================
FAIL: test_week_password (__main__.PasswordTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_password_1.py", line 21, in test_week_password
    self.assertTrue(passwd != 'password123', msg)
AssertionError: False is not true : user tom has a weak password

----------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)

解释一下

  • setUp方法运行了2次,所以打印出了2次'set up',这是因为上面的用例中有2个测试方法(2个方法名以test开头的方法),setUp会在每个测试方法执行之前执行1次

  • 由于用户tom的密码是弱密码password123,所以上面的用例运行失败了,打印出1个"F",有几个F就代表有几个测试用例失败

  • 测试方法运行失败时测试结果里会打印出失败方法的方法名,因此好的测试方法名可以方便我们快速找出失败用例

  • 为了让错误信息更加容易理解,我们经常会自定义断言出错提示消息,比如msg = "user %s has a weak password" %(data['name'])。一旦断言失败,我们一眼就能看出是哪个用户的密码强度不够

亲自动手试一试

假设我们增加1条测试数据,如下所示

[
  {"name":"jack","password":"Iloverose"},
  {"name":"rose","password":"Ilovejack"},
  {"name":"tom","password":"password123"},
  {"name":"jerry","password":"password"}
]

再运行上面的用例,观察一下测试结果是否会有不同?如果没有不同,那是为什么?

 

参考

http://www.testclass.net/pyunit/test_example_1

 

标签:name,password123,多组,unittest,用例,测试,test,password,self
来源: https://www.cnblogs.com/candyYang/p/12290139.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有