1、概念说明

① unittest:python中自带的单元测试框架,封装了一些校验返回的结果方法和一些用例执行前的初始化操作

② TestCase:测试用例

③ TestSuite:测试套,即多个测试用例集合在一起

④ TestLoader:用来加载TestCase到TestSuite中的

⑤ TestRunner:执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

2、unittest模块说明

1)unittest方法说明

① unittest.TestCase:TestCase类,所有测试用例类继承的基本类

② unittest.main():main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开

头的测试方法,并自动执行他们。执行方法的默认顺序是:根据ASCII码的顺序加载测试

用例,数字与字母的顺序为:0-9,A-Z,a-z。

③ unittest.TestSuite():用来创建测试套件的。

④ unittest.TextTextRunner():通过该类下面的run()方法来运行suite所组装的测试用例,入参

为suite测试套件。

⑤ unittest.defaultTestLoader(): 通过该类下面的discover()方法可自动根具测试目录start_dir

匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直

接通过run()方法执行discover。用法如下:

discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

⑥ unittest.skip():可用装饰器屏蔽不想执行的用例

@unittest.skip(reason): skip(reason)装饰器:无条件跳过装饰的测试,并说明跳过测试的原因。

@unittest.skipIf(reason): skipIf(condition,reason)装饰器:条件为真时,跳过装饰的测试,并说明跳过测试的原因。

@unittest.skipUnless(reason): skipUnless(condition,reason)装饰器:条件为假时,跳过装饰的测试,并说明跳过测试的原因。

@unittest.expectedFailure(): expectedFailure()测试标记为失败。

2)TestCase类的方法说明

① setUp():用于测试用例执行前的初始化工作。

② tearDown():用于测试用例执行之后的善后工作。如关闭数据库连接,关闭浏览器。

③ assert*():断言,实际结果和预期结果是否相等

assertEqual(a,b,[msg='失败时打印的信息']):断言a,b是否相等,相等则用例通过。

assertNotEqual(a,b,[msg='失败时打印的信息']):断言a,b是否相等,不相等则试用例通过。

assertTrue(x,[msg='失败时打印的信息']):断言x是否True,是True则用例通过。

assertFalse(x,[msg='失败时打印的信息']):断言x是否False,是False则用例通过。

assertIs(a,b,[msg='失败时打印的信息']):断言a是否是b,是则用例通过。

assertNotIs(a,b,[msg='失败时打印的信息']):断言a是否是b,不是则用例通过。

assertIsNone(x,[msg='失败时打印的信息']):断言x是否None,是None则用例通过。

assertIsNotNone(x,[msg='失败时打印的信息']):断言x是否None,不是None则用例通过。

assertIn(a,b,[msg='失败时打印的信息']):断言a是否在b中,在b中则用例通过。

assertNotIn(a,b,[msg='失败时打印的信息']):断言a是否在b中,不在b中则用例通过。

assertIsInstance(a,b,[msg='失败时打印的信息']):断言a是b的一个实例,是则用例通过。

assertNotIsInstance(a,b,[msg='失败打印的信息']):断言a不是b的一个实例,不是则用例过。

3)TestSuite类的方法(组织用例时需要用到)

①addTest(): 将测试用例添加到测试套件中,如下

suite = unittest.TestSuite()

suite.addTest(test_baidu.BaiduTest('test_baidu'))

4)TextTextRunner的方法(组织用例时需要用到)

①run(): 运行测试套件的测试用例,入参为suite测试套件,如下

runner = unittest.TextTestRunner()

runner.run(suite)

3、unitest简单使用

# coding=utf-8
import unittest #创建测试类,继承unittest.TestCase
class TestMethod(unittest.TestCase): # 类方法:整个测试中只会执行一次,类方法需要一个注解@classmethod,且方法名称需要固定为setUpClass、tearDownClass
@classmethod
def setUpClass(cls):
print '类执行之前的方法' @classmethod
def tearDownClass(cls):
print '类执行之后的方法' # 每次方法之前执行
def setUp(self):
print 'test-->setUp'
# 每次方法之后执行
def tearDown(self):
print 'test-->tearDown' # 注意所有的case都要以test开头,如果不以test开头,那么你的case无法执行
def test_01(self):
print 'test-->testCase-1' def test_02(self):
print 'test-->testCase-2' # 执行
if __name__ == '__main__':
unittest.main()

执行结果如下

4、unittest和request重构封装

1)定义两个接口,分别为get、post

# get接口数据处理
def dadaHandle_get(request):
if request.method == 'GET':
results = {}
username = request.GET.get('username')
mobile = request.GET.get('mobile')
data = request.GET.get('data')
results['user'] = username
results['mobileNum'] = mobile
results['data']= data
results =json.dumps(results)
return HttpResponse(results,content_type='application/json;charset=utf-8')
else:
return render_to_response('login.html') # post接口数据处理
def dadaHandle_post(request):
if request.method == 'POST':
results = {}
username = request.POST.get('username')
password = request.POST.get('password')
results['user'] = username
results['pwd'] = password
results =json.dumps(results)
return HttpResponse(results,content_type='application/json;charset=utf-8')
else:
return render_to_response('login.html')

2)requests封装方法处理get、post请求

# coding=utf-8
import requests
import json class SendMain: # 发送post请求
def send_post(self,url, data):
res = requests.post(url=url, data=data).json()
# 返回结果格式化
return json.dumps(res, indent=2, sort_keys=True) # 发送get请求
def send_get(self,url, data):
res = requests.get(url, data).json()
# 返回结果格式化
return json.dumps(res, indent=2, sort_keys=True)
# 既能发get又能发post请求
def send_main(self,url, method, data=None):
res = None
if method == 'GET':
res = self.send_get(url, data)
else:
res = self.send_post(url, data)
return res

3)unittest结合requests处理get、post

# coding=utf-8
import unittest
from base.requestsDemo import SendMain #创建测试类,继承unittest.TestCase
class TestMethod(unittest.TestCase): # 每次方法之前执行
def setUp(self):
self.run = SendMain() # 注意所有的case都要以test开头,如果不以test开头,那么你的case无法执行
def test_01(self):
postData = {'username': 'wangling', 'password': ''}
postUrl = 'http://127.0.0.1:8000/postDataHandle/'
res = self.run.send_main(postUrl,'POST',postData)
print res def test_02(self):
getData = {'username': 'wl', 'mobile': '', 'data': 'haha'}
getUrl = 'http://127.0.0.1:8000/getDataHandle'
res = self.run.send_main(getUrl,'GET',getData)
print res # 执行
if __name__ == '__main__':
unittest.main()

7-unittest和requests重构、封装处理get/post请求的更多相关文章

  1. 对比3种接口测试的工具:jmeter+ant;postman;python的requests+unittest或requests+excel

    这篇随笔主要是对比下笔者接触过的3种接口测试工具,从实际使用的角度来分析下3种工具各自的特点 分别为:jmeter.postman.python的requests+unittest或requests+ ...

  2. python requests函数封装方法

    python  requests函数封装方法 上代码 import requests import json """ 封装request请求, 1.post:my_pos ...

  3. 使用dispatch_group实现并封装分组并发网络请求

    在实际开发中我们通常会遇到这样一种需求:某个页面加载时通过网络请求获得相应的数据,再做某些操作.有时候加载的内容需要通过好几个请求的数据组合而成,比如有两个请求A和B,我们通常为了省事,会将B请求放在 ...

  4. python 爬虫 基于requests模块发起ajax的post请求

    基于requests模块发起ajax的post请求 需求:爬取肯德基餐厅查询http://www.kfc.com.cn/kfccda/index.aspx中指定某个城市地点的餐厅数据 点击肯德基餐厅查 ...

  5. python 爬虫 基于requests模块发起ajax的get请求

    基于requests模块发起ajax的get请求 需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据 用抓包工具捉取 使用ajax加载页面的请求 鼠标往下 ...

  6. python+requests实现接口测试 - get与post请求使用(转载)

    转自:http://www.cnblogs.com/nizhihong/p/6567928.html 简介:Requests 是用Python语言编写,基于 urllib,采用 Apache2 Lic ...

  7. python+requests实现接口测试 - get与post请求使用

    简介:Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 ...

  8. android基于开源网络框架asychhttpclient,二次封装为通用网络请求组件

    网络请求是全部App都不可缺少的功能,假设每次开发都重写一次网络请求或者将曾经的代码拷贝到新的App中,不是非常合理,出于此目的,我希望将整个网络请求框架独立出来,与业务逻辑分隔开,这样就能够避免每次 ...

  9. 使用Typescript重构axios(二十二)——请求取消功能:收尾

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

随机推荐

  1. vim 常用指令总结

    vim的好处(四大好处) vim具有大量的操作技巧,编辑能力强大且速度比其他工具快的多! (这里举个简单的小例子:将每行的前四个字母复制到每行的末尾; 将文本中的所有word替换为words; 等等很 ...

  2. C# 微信网页授权多域名解决

    在做微信开发的时候,会遇到这样的场景:一个公众号,会有多个业务:官网.论坛.商城等等 微信网页授权域名 目前最多可以填写两个!!!,那么问题来了?这应该怎么办? 答案就是: 做一个中转服务! 域名1: ...

  3. 25. Reverse Nodes in k-Group (JAVA)

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k  ...

  4. vue 存取、设置、清除cookie

    步骤: 第一步:assets目录下添加cookie.js文件 export function setCookie(c_name,value,expire) { var date=new Date() ...

  5. 重构现有代码:Refactoring

    重构现有代码:Refactoring 1.WHY SHOULD WE REFACTOR? 1.Refactoring Improves the Design of Software Without r ...

  6. css样式之input输入框默认样式

    帮朋友写个简单的课程设计,后面会贴出来,项目刚开始就遇到一个坑(给input输入框设定样式,但是,点击后会出现蓝色边框),之前写其他的项目时也遇到过,百度一下资料解决了,现在又碰到了,写一下,留着备用 ...

  7. Python:a,*args,**kwargs的理解

    1.何时用这些参数? 在任何时候继承类和重写方法时,应当用到’*args’和’**kwargs’将接收到的位置参数和键值参数给父类方法 . 2.一句话清晰说明: a是常规的变量类型,比如int,str ...

  8. Windows10开机pin界面循环重启解决办法

    昨天电脑在开机时,进入pin界面,输入pin码之后系统没反应,也不显示登陆成功,大概一分钟之后自动重启,遂百度答案:大部分建议都是在开机显示win图标时强制关机,强制关机两次即自动进入疑难解答页面,以 ...

  9. python生成器 获取 目录下文件

    # os.walk()和os.list 都是得到所有文件的列表, 如果目录下文件特别多, 上亿了, 我们就需要生成器的方式获取 # 要求目录下面没有目录, 会递归到子目录下面找文件, (如果有子目录可 ...

  10. 初识spark的MLP模型

    初识Spark的MLP模型 1. MLP介绍 Multi-layer Perceptron(MLP),即多层感知器,是一个前馈式的.具有监督的人工神经网络结构.通过多层感知器可包含多个隐藏层,实现对非 ...