unittest框架(三)unittest+yaml数据驱动

学习完了如何用yaml文件管理用例,如何进行单元测试,如何产生漂亮的测试报告,那么结合这几点,我们简单学习下unittest+yaml数据驱动来测试。

第一步:首先,我们建一个yaml文件,管理用例,以/api/user/login登录接口为例。

第二步:新建python文件,编写逻辑代码

import unittest,requests
import ddt
from BeautifulReport import BeautifulReport as bf
from urllib import parse
@ddt.ddt   #告诉这个类要使用ddt了
class Login(unittest.TestCase):
    base_url = 'http://118.24.3.40/'
    @ddt.file_data('login.yaml')#ddt帮你读文件,获取文件内容,循环调用函数
    def test_request(self,**kwargs):
        detail = kwargs.get('detail','没写用例描述')
        self._testMethodDoc = detail  #动态的用例描述
        url = kwargs.get('url')#url
        url = parse.urljoin(self.base_url,url)#拼接好url
        method = kwargs.get('method','get')#请求方式,默认是get,以防用户未在yaml用例里没写请求方式
        data = kwargs.get('data',{}) #请求参数,没有数据的时候默认给一个空字典
        header = kwargs.get('header',{})#请求头
        cookie = kwargs.get('cookie',{})#cookie
        check = kwargs.get('check')
        method = method.lower() #便于处理
        try:
            if method=='get':
                res = requests.get(url,params=data,cookies=cookie,headers=header).text
                #因为接口有异常的情况下, 可能返回的不是json串,会报错,所以将res转为text类型
            else:
                res = requests.post(url,data=data,cookies=cookie,headers=header).text
        except Exception as e:
            print('接口请求出错')
            res = e
        for c in check:
            self.assertIn(c,res,msg='预计结果不符,预期结果【%s】,实际结果【%s】'%(c,res))

sutie = unittest.TestSuite()
sutie.addTest(unittest.makeSuite(Login))
run = bf(sutie)
run.report('login_test','登录测试用例')
# print(run.success_count) #通过的次数
# print(run.failure_count)  #失败的次数

 

posted @ 2018-06-27 17:44  西瓜汁拌面  阅读(500)  评论(0编辑  收藏  举报