python接口自动化5 unittest使用

5-1 unittest简单使用

1、安装unitest    cmd >python> import unittest

   python默认情况下是有unittest包的

2、用例方法必须以test开头

3、在每个test方法执行的时候都会执行一遍setUp()和tearDown()该场景针对那些测试用例间有相互影响的场景,才需要在每执行一条新用例时进行一次初使化,执行完毕后再清空所有配置

在整个类中执行一遍setUPClass()和tearDownClass()然后所有用例执行完成后再清空所有配置,此种用法主要用在用例之间相互没有什么影响的场景

结果:setUp连接数据库,tearDown关闭数据库,这样反复执行,无疑是会增加数据库服务器资源的损耗,且浪费时间

 

5-2 unittest和request重构封装

把unittest用例和之前写的接口结合使用

import unittest
from we import RunMain
class TestMethod(unittest.TestCase):
    def test_01(self):
        url = 'http://127.0.0.1:8000/login/'
        data = {
            'username': 'test1',
            'password': 222
        }
        run=RunMain(url,'GET',data=None)
        res = run.run_main(url,'GET',data)
        print(res)
    def test_02(self):
        url = 'http://127.0.0.1:8000/login/'
        data = {
            'username': 'test2',
            'password': 222
        }
        run = RunMain(url, 'GET', data=None)
        res = run.run_main(url,'GET',data)
        print(res)

if __name__ == '__main__':
    unittest.main()

 

5-3 unittest中assert的使用

import unittest
import json
from we import RunMain
class TestMethod(unittest.TestCase):
    def test_01(self):
        url = 'http://127.0.0.1:8000/login/'
        data = {
            'username': 'test1',
            'password': 222
        }
        run=RunMain(url,'GET',data=None)
        res = json.loads(run.run_main(url,'GET',data))
        self.assertEqual(res['user'],'test1','测试失败')

    def test_02(self):
        url = 'http://127.0.0.1:8000/login/'
        data = {
            'username': 'test1',
            'password': 222
        }
        run = RunMain(url, 'GET', data=None)
        res = json.loads(run.run_main(url,'GET',data))
        self.assertEqual(res['user'],'test1','测试失败')

if __name__ == '__main__':
    unittest.main()

5-4 unittest中case的管理及运用

1、全局变量

Def test01(self):

global name

Name =nihao

Def test02(self):

Print(name)

 

2、unittest里面执行用例,是按照用例的序号顺序执行

   先执行test01,后执行test02

   不可以先执行序号较小的用例

3、跳过第二个case

   在case前面加@unittest.skip(case名称)

   @unittest.skip('test_02')
   def test_02(self):

4、unittest.TestSuite执行方法

5、使用TestSuite测试套件只添加1条用例,但是却执行了所有用例。

   这个问题怎么解决?

第一步,进入到编辑结构

第二步,新建一个python文件

第三步,选择要执行的python脚本,应用。然后再次运行

 

5-5 unittest和HTMLTestRunner结合生成报告

  1. 下载HTMLTestRunner报告

下载路径:https://pypi.python.org/pypi/HTMLTestRunner ,

右键 HTMLTestRunner.py 目标另存为python的Lib的路径下

2、因为HTMLTestRunner.py 原本就是python2版本,目前还没找到python3版本,所以需要我们自己修改 HTMLTestRunner.py 文件

修改内容如下:

第94行,将import StringIO修改成import io

第539行,将self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer = io.StringIO()

第642行,将if not rmap.has_key(cls):修改成if not cls in rmap:

第766行,将uo = o.decode('latin-1')修改成uo = e

第772行,将ue = e.decode('latin-1')修改成ue = e

第631行,将print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)修改成print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))

 

百度链接:https://www.cnblogs.com/hy546880109/p/12078784.html

3、检查HTMLTestRunner报告是否导入成功

Cmd->python->import HTMLTestRunner

4、导入HTMLTestRunner报告,执行报告

import HTMLTestRunner

执行报告

if __name__ == '__main__':
    filepath='E:/untitled/report/htmlReport.html' #新建路径,用于存放报告
    fp= open(filepath,'wb')# 打开一个二进制文件,允许写入
    suite = unittest.TestSuite()
    suite.addTest(TestMethod('test_01'))
    suite.addTest(TestMethod('test_02'))
    #使用HTMLTestRunner模块
    runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title='第一个测试报告',
                                         description='测试用例情况:')
    runner.run(suite)#unittest和HTMLTestRunner结合

5、显示报告

5-6 unittest之常见面试解答及知识回顾

unittest常见面试题:

1、如何使用python开发测试框架

Python + requests + mysql + unittest + HTMLTextRunner + jenkins

 

2、如何管理case

用unittest去做管理,可以都执行,也可以执行其中某一些case,也可以跳过某些case

case可以存放在excel里,也可以存放在.py文件里

 

3、简述case的执行

case执行按序号执行,有依赖的情况,必须先执行依赖的case,后执行依赖上一条的case

 

4、如何解决case依赖

可以使用全局变量来传递数据

也可以把数据存储在配置文件或数据库里,然后去配置文件和数据库里取

 

5、如何生成测试报告

利用第三方HTMLTestRunner报告,结合unittest来生成报告

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值