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) #失败的次数