• unittest 知识问答题-也许面试会有用-欢迎补充


    一、如何用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点执行一次。

             

  • 相关阅读:
    html+css
    HTML的矢量图转换文字
    js初级——复习html+css-下拉标志
    js初级——复习html+css
    四方定理(递归) --java
    进制转换模板
    最大值最小化问题 和最小值最大化问题 ---(二分)
    分治法---循环日程表问题
    全排列 ---java
    并查集---java模板
  • 原文地址:https://www.cnblogs.com/xiaoxionghuihui/p/13993420.html
Copyright © 2020-2023  润新知