7-unittest和requests重构、封装处理get/post请求

1、概念说明

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

② TestCase:测试用例

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

④ TestLoader:用来加载TestCaseTestSuite中的

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

 

2unittest模块说明

1unittest方法说明

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

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

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

用例,数字与字母的顺序为:0-9A-Za-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()测试标记为失败。

2TestCase类的方法说明

① 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='失败时打印的信息']):断言ab的一个实例,是则用例通过。

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)

 

3unitest简单使用

# 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()

执行结果如下

 

4unittestrequest重构封装

1)定义两个接口,分别为getpost

# 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')

2requests封装方法处理getpost请求 

# 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

3unittest结合requests处理getpost

# 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': '123456'}
        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': '13066990001', '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()

 

转载于:https://www.cnblogs.com/santiandayu/p/9985848.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值