首页 > 技术文章 > unittest 知识问答题-也许面试会有用-欢迎补充

xiaoxionghuihui 2020-11-17 11:44 原文

一、如何用python+unittest实现接口测试自动化。

1、unittest实现接口测试自动化的流程是怎样的?

(1)如何获取测试接口信息?

答:a/从研发人员处获取,b/通过fiddler或charles或chrome的F12功能查看Network,并与研发人员确认后获取,

      c/常见的接口测试文档格式

     

(2)如何解决case间依赖?  比如获取token

答:针对不同情况有不同处理方式。

      a/仅是当前case的前置依赖,则写在当前case内

      b/多个case的共同前置依赖,可写在公共方法中。则每次执行case时,仅需获取class中已经获取到前置。 比如登录用户token

         缺点是,公共方法会被多次调用,接口访问频繁。

         如下所示:

import unittest
import requests

"""
公共方法获取token
"""
host = 'https://api.xxx.net'


class CommonToken(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("setUpClass")

    @classmethod
    def tearDownClass(cls):
        print("tearDownClass")

    def commonToken(self):
        url = host + '/web_login'
        data = {'phone': '12345678901', 'pwd': '123456'}
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        response = requests.post(url, data=data, headers=headers).json()
        token = response['data']['token']
        return token

    def testUserDetail(self):
        url = host + '/user_info'
        access_token = self.commonToken()
        if access_token:
            data = {'token': '%s' % (access_token)}
            response = requests.get(url, data=data).json()
            self.assertEqual(response['code'], 0, '状态码错误')
        else:
            self.assertTrue(False, '未获取到Token')

    def testMyOrder(self):
        url = host + '/find_orders'
        access_token = self.commonToken()
        if access_token:
            data = {'token': '%s' % (access_token)}
            response = requests.get(url, params=data).json()
            self.assertEqual(response['code'], 0, '状态码错误')
        else:
            self.assertTrue(False, '未获取到Token')


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

 

        c/采用全局变量

           代码与b/操作类似,只是access_token需要声明为global 。 即:

global access_token

      

       d/【下策】按程序逻辑推算出每个接口的输入数据,单独执行接口测试,暂不考虑多个接口依赖的问题。      

(3)如何使用断言?常用的断言方法有哪些?

答:每个case都需要执行断言,unittest通过执行case,判断case是否执行成功。

      常用断言方法有:asserEqual(a,b,reason) --a/b是否相等

                              assertIsInstance(a,#dict/list#,reason) --a是否是字典或列表

                              assertGreater(a,b,reason) --a是否大于b

                              assertTrue(x,reason)--x是否为真

                              assertFalse(x,reason)--x是否为假

                              assertIsNotNone(x,reason)--x是否为None

(4)如何生成测试报告?HTMLTestRunner类

答:python3可通过HTMLTestRunner类实现生成html的自动化测试报告,使用方法如下:

      a/在命令行中通过pip3 install html-testRunner下载

      b/执行测试用例的case中,写:

 

          import HtmlTestRunner

          import unittest

          f = open("output_fir + output_file",'w')

          runner = HtmlTestRunner.HTMLTestRunner("output_dir",descriptions="描述信息" ,verbosity=2)

          runner.run()       

(5)如何配合Jenkins使用?

答:a/登录官网下载安装包

      b/在本地安装完成, 默认8080端口 

         下载war包时,需先安装java运行环境,命令行中执行java -jar  jenkins.war -httpPort=8080

      c/登录本地jenkins服务,http://localhost:8080,通过脚本修改时区。

      d/解锁jenkins-安装插件-设置初始管理员账号和密码

      c/创建project

      d/system config中设置邮件通知协议和接收邮件和发送邮件方邮箱

      e/设置定时任务,进入项目,并设置jenkins构建触发器build periodically 。 按*****设置  H 5*** 每天的凌晨5点执行一次。

         

推荐阅读