Python 高级编程笔记之测试驱动开发

书籍目录:
1.我不测试

  1. 测试驱动开发原理
  2. 哪一类测试

2.我测试

  1. Unittest的缺陷
  2. Unittest的替代品
  3. 仿真和模拟
  4. 文档驱动开发

主要内容:

测试驱动开发原理:TDD由编写覆盖所需要功能的测试用例,之后编写该功能两部分工作组成。换句话说,将在代码存在前编写测试用例。

哪一类测试:最主要的是验收测试(或功能测试)和单元测试。

Unittest的缺陷:

  1. 该框架笨重,因为:1.必须在TestCase子类中编写所有的测试;2.必须在方法名称前加test;3.被要求使用TestCase提供的断言方法;4.必须为所要的运行测试活动建立测试套件。
  2. 框架难以扩展
  3. 测试装置有时难组织,因为setUp和tearDown机制绑定在TestCase上,但是它们在每测试时运行一次。
  4. 在Python软件之上不容易运行测试活动,必须编写额外的脚本来收集测试,聚集并运行它。

Unittest的替代品:

  1. nose
  2. py.test

文档驱动开发:

  1. 编写一个故事

书本中的内容过于理论化,以下是个人心得:

  1. 本章节介绍了TDD(测试驱动开发)原理及必要性
  2. 单元测试框架:unittest 、nose 、py.test

unittest本人一直用来做自动化框架,nose和py.test先前了解了但没怎么用。nose示例如下:

good.py

# -*- coding:utf-8 -*-
import hashlib
import time
import requests

from Crypto.Cipher import AES
from Crypto import Random
from binascii import a2b_hex


# AES加密
def get_sign_nature(timestamp):
    BS = 16
    pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
    key_str = "D8EF40495D6C6CD171BFA4403516B035"
    plain = timestamp
    iv = Random.new().read(AES.block_size)
    obj = AES.new(a2b_hex(key_str),AES.MODE_ECB,iv)
    plain = pad(plain)
    result = obj.encrypt(plain).encode("hex").upper()
    return result


def login(mobile, password):
    head = "http://app55test.mncats365.com:9080/"
    body = "user/app/login.do"
    tim = str(time.time()).split(".")[0] + "000"
    must_parameters = "&isApple=0&ver_name=5.5.0" + "&timestamp=" + tim + "&signnature=" + get_sign_nature(tim)
    payload = "&userPassword=" + hashlib.md5(password).hexdigest()[8:24] + \
              "&token=f7f3d60393d49ff8&regid=020759f564f&userAccount="+ mobile
    url = head + body + "?" + payload + "&" + must_parameters
    headers = {'content-type': 'application/json'}
    try:
        r = requests.post(url, headers=headers)
        result = r.json()
    except:
        result = {"status": url}
    return result

if __name__ == '__main__':
    print login("13133841111", "123456")

test_good.py

# -*- coding:utf-8 -*-
import nose
from good import login


def test_login():
    assert login("13133841111", "123456").get("status") == 1

if __name__ == '__main__':
    nose.runmodule()

执行结果:

C:\Python27\python.exe C:/Users/009/PycharmProjects/Auto/Python/Python高级编程/chapter_11/test_good.py
.
----------------------------------------------------------------------
Ran 1 test in 0.238s

OK

Process finished with exit code 0

参考文献:
Python单元测试框架之pytest—如何执行测试用例

本人利用Bootstrap + EasyUI + Django开发网站:http://www.xuyangting.com/ 欢迎来访

阳台测试: 239547991(群号)

本人博客:http://xuyangting.sinaapp.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值