栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

API自动化测试(Python+unitest)-实例介绍

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

API自动化测试(Python+unitest)-实例介绍

第一、API自动化测试框架目录结构介绍

 第二、代码展现

  1. api/api_json.py
import requests
class Api_json(object):
    def api_dev_part_ver(self, url, DeviceID, Info):
        headers = {"Content-Type": "application/json"}
        data = {"DeviceID": DeviceID, "Info": Info}
        # 调用post并返回响应对象
        return requests.post(url, headers=headers, json=data)
    def api_post_stock(self, url, DevID, Info):
        headers = {"Content-Type": "application/json"}
        data = {"DevID": DevID, "Info": Info}
        # 调用post并返回响应对象
        return requests.post(url, headers=headers, json=data)
    def api_data_upload(self, url, ReportDeviceID, DeviceID,StationCode,ListNum,List):
        headers = {"Content-Type": "application/json"}
        data = {"ReportDeviceID": ReportDeviceID, "DeviceID":DeviceID, "StationCode":StationCode,"ListNum":ListNum,"List":List}
        # 调用post并返回响应对象
        return requests.post(url, headers=headers, json=data)
    def api_tpu_param(self, url, DeviceID, Info):
        headers = {"Content-Type": "application/json"}
        data = {"DeviceID": DeviceID, "Info": Info}
        # 调用post并返回响应对象
        return requests.post(url, headers=headers, json=data)
    def api_sam_info(self, url, NodeID, Info):
        headers = {"Content-Type": "application/json"}
        data = {"NodeID": NodeID, "Info": Info}
        # 调用post并返回响应对象
        return requests.post(url, headers=headers, json=data)

2、case/test_more_json.py

import unittest
from parameterized import parameterized
from test_api_case.api.api_json import Api_json
from test_api_case.tools.read_more_json import ReadJson

datas = ReadJson("api_case_more.json").read_json()
def get_data_Devpart():
    arrs = []
    tmp = datas['case_001']
    arrs.append((tmp['url'], tmp['DeviceID'], tmp['Info'], tmp['code'], tmp['req'], tmp['msg']))
    # for data in datas.values():
    #     arrs.append((data.get("url"),
    #                  data.get("Info"),
    #                  data.get("code"),
    #                  data.get("req"),
    #                  data.get("msg")))
    return arrs
def get_ticket_stock():
        # 新建空列表,添加读取json数据
        arrs = []
        tmp = datas['case_002']
        arrs.append((tmp['url'], tmp['DevID'], tmp['Info'], tmp['code'], tmp['req'], tmp['msg']))
        return arrs
def get_cash_stock():
    # 新建空列表,添加读取json数据
    arrs = []
    tmp = datas['case_003']
    arrs.append((tmp['url'], tmp['DevID'], tmp['Info'], tmp['code'], tmp['req'], tmp['msg']))
    return arrs
# print(get_cash_stock())
def get_data_upload():
    # 新建空列表,添加读取json数据
    arrs = []
    tmp = datas['case_004']
    arrs.append((tmp['url'],tmp['ReportDeviceID'],tmp['DeviceID'], tmp['StationCode'],tmp['ListNum'],tmp['List'],tmp['code'], tmp['req'], tmp['msg']))
    return arrs
    print(tmp['msg'])

def get_tpu_param():
    # 新建空列表,添加读取json数据
    arrs = []
    tmp = datas['case_005']
    arrs.append((tmp['url'], tmp['DeviceID'], tmp['Info'], tmp['code'], tmp['req'], tmp['msg']))
    return arrs

def get_sam_info():
    # 新建空列表,添加读取json数据
    arrs = []
    tmp = datas['case_006']
    arrs.append((tmp['url'], tmp['NodeID'], tmp['Info'],tmp['code'],tmp['req'],tmp['msg']))
    return arrs
    print(tmp['NodeID'])

class TestJson(unittest.TestCase):
        @parameterized.expand(get_data_Devpart())
        def test_dev_part_ver(self,url, DeviceID, info, code ,req, msg):
            s = Api_json().api_dev_part_ver(url, DeviceID, info)
            self.assertEqual(0,s.json()['code'])
            self.assertEqual("part.report",s.json()["req"])
            self.assertEqual("server ok",s.json()['msg'])
        @parameterized.expand(get_ticket_stock())
        def test_ticket_stock(self, url, DevID, info, code, req, msg):
            # print(url, DevID, info, code, req, msg)
            s = Api_json().api_post_stock(url, DevID, info)
            self.assertEqual(0, s.json()['code'])
            self.assertEqual("ticket_storage", s.json()["req"])
            self.assertEqual("server ok", s.json()['msg'])
        @parameterized.expand(get_cash_stock())
        def test_cash_stock(self, url, DevID, info, code, req, msg):
            # print(url, DevID, info, code, req, msg)
            s = Api_json().api_post_stock(url, DevID, info)
            self.assertEqual(0, s.json()['code'])
            self.assertEqual("cash_storage", s.json()["req"])
            self.assertEqual("server ok", s.json()['msg'])
        @parameterized.expand(get_tpu_param())
        def test_tpu_param(self,url, DeviceID, info, code ,req, msg):
            s = Api_json().api_tpu_param(url, DeviceID, info)
            self.assertEqual(0,s.json()['code'])
            self.assertEqual("tpu_report",s.json()["req"])
            self.assertEqual("server ok",s.json()['msg'])
        @parameterized.expand(get_data_upload())
        def test_dataupload_json(self, url,ReportDeviceID,DeviceID, StationCode, ListNum,List, code, req, msg):
            # print(url)
            # print(List)
            s = Api_json().api_data_upload(url, ReportDeviceID,DeviceID, StationCode,ListNum,List)
            self.assertEqual(0, s.json()['code'])
            self.assertEqual("DataUploadStatus", s.json()["req"])
            self.assertEqual("server ok", s.json()['msg'])
        @parameterized.expand(get_sam_info())
        def test_dataupload_json(self, url, NodeID, Info, code, req, msg):
            s = Api_json().api_sam_info(url, NodeID,Info)
            self.assertEqual(0, s.json()['code'])
            self.assertEqual("api_v42_dev_sam", s.json()["req"])
            self.assertEqual("server ok", s.json()['msg'])

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

3、data/api_case_more.json

{
  "case_001":{
                 "url": "http://10.15.122.23:11418/api/v42/para/part/report",
                 "DeviceID":"09212011",
                 "Info":
                 [
                 {"ID":"D1","MajorVersion":"0046","SubVersion":"0"},
                 {"ID":"D3","MajorVersion":"0046","SubVersion":"0"},
                 {"ID":"D2","MajorVersion":"0046","SubVersion":"0"}
                 ],
                 "code": 0,
                 "req": "part.report",
                 "msg": "server ok"},
  "case_002": {
                 "url": "http://10.15.122.23:11418/api/v42/ticket/storage",
                 "DevID":"09212211",
                 "Info":
                 [

                   		{"Type":1,"Location":1,"BoxID":"00000000","Currency":1,"Quantity":88,"Amt":0},
                   		{"Type":1,"Location":2,"BoxID":"00000000","Currency":1,"Quantity":100,"Amt":0},
                   		{"Type":2,"Location":1,"BoxID":"00000000","Currency":1,"Quantity":3,"Amt":0}
                 ],
                 "code": 0,
                 "req": "ticket_storage",
                 "msg": "server ok"},
  "case_003":{
                   "url": "http://10.15.122.23:11418//api/v42/cash/storage",
                   "DevID":"09212211",
                    "Info":
                    [
                    {"Type":17,"Location":1,"BoxID":"12000001","Currency":100,"Quantity":0,"Amt":0},
                    {"Type":18,"Location":1,"BoxID":"13210111","Currency":100,"Quantity":0,"Amt":0},
                    {"Type":19,"Location":1,"BoxID":"12000003","Currency":100,"Quantity":0,"Amt":0},
                    {"Type":19,"Location":2,"BoxID":"12000004","Currency":100,"Quantity":0,"Amt":0},
                    {"Type":34,"Location":2,"BoxID":"12000005","Currency":500,"Quantity":0,"Amt":0},
                    {"Type":34,"Location":1,"BoxID":"12000006","Currency":100,"Quantity":0,"Amt":0},
                    {"Type":34,"Location":3,"BoxID":"00000000","Currency":1000,"Quantity":1,"Amt":1000},
                    {"Type":33,"Location":1,"BoxID":"00000000","Currency":100,"Quantity":0,"Amt":0},
                    {"Type":33,"Location":1,"BoxID":"00000000","Currency":500,"Quantity":0,"Amt":0},
                    {"Type":33,"Location":1,"BoxID":"00000000","Currency":1000,"Quantity":0,"Amt":0},
                    {"Type":33,"Location":1,"BoxID":"00000000","Currency":2000,"Quantity":0,"Amt":0},
                    {"Type":33,"Location":1,"BoxID":"00000000","Currency":5000,"Quantity":0,"Amt":0},
                    {"Type":33,"Location":1,"BoxID":"00000000","Currency":10000,"Quantity":0,"Amt":0},
                    {"Type":36,"Location":1,"BoxID":"00000000","Currency":100,"Quantity":0,"Amt":0},
                    {"Type":36,"Location":1,"BoxID":"00000000","Currency":500,"Quantity":0,"Amt":0}
                    ],
                   "code": 0,
                    "req": "cash_storage",
                    "msg": "server ok"
},

  "case_004": {
                "url": "http://10.15.122.23:11418/api/v42/dev/DataUploadStatus",
                  "ReportDeviceID":"09212011",
                  "DeviceID":"09212011",
                  "StationCode":"0921",
                  "ListNum":1,
                      "List":
                      [
                          {"Date":"20220208","TranNum":400,"BusiNum":400}
                      ],
                "code": 0,
                "req": "DataUploadStatus",
                "msg": "server ok"},
  "case_005": {
                "url": "http://10.15.122.23:11418/api/v42/para/tpu/report",
                "DeviceID":"09212011",
                 "Info":
                 [
                      {"CardReaderID":209,
                          "Info":
                          [
                              {"Type":"3082","Version":"000245"},
                              {"Type":"3083","Version":"000119"},
                              {"Type":"4002","Version":"000260"},
                              {"Type":"4007","Version":"000224"},
                              {"Type":"4008","Version":"000209"},
                              {"Type":"4009","Version":"000211"},
                              {"Type":"4020","Version":"003535"},
                              {"Type":"4021","Version":"210419"},
                              {"Type":"3008","Version":"000273"},
                              {"Type":"4003","Version":"000244"},
                              {"Type":"4004","Version":"000244"},
                              {"Type":"4010","Version":"000235"}
                          ]
                		},
                      {"CardReaderID":211,
                          "Info":
                          [
                              {"Type":"3082","Version":"000245"},
                              {"Type":"3083","Version":"000119"},
                              {"Type":"4002","Version":"000260"},
                              {"Type":"4007","Version":"000224"},
                              {"Type":"4008","Version":"000209"},
                              {"Type":"4009","Version":"000211"},
                              {"Type":"4020","Version":"003535"},
                              {"Type":"4021","Version":"210419"},
                              {"Type":"3008","Version":"000273"},
                              {"Type":"4003","Version":"000245"},
                              {"Type":"4004","Version":"000245"},
                              {"Type":"4010","Version":"000236"}
                          ]
                      }
                 ],
                  "code": 0,
                  "req": "tpu_report",
                  "msg": "server ok"
  },
  "case_006": {
                 "url": "http://10.15.122.23:11418/api/v42/dev/sam",
                 "NodeID":"09212011",
                  "Info":
                   [
                    {"Position":"209","OldNo":"0","NewNo":"0",
                      "Info":
                       [
                         {"SlotNo":"0","OldNo":"0","OldType":"0","NewNo":"20180009000000000000","NewType":"96"},
                         {"SlotNo":"3","OldNo":"0","OldType":"0","NewNo":"40002020061800000424","NewType":"165"},
                         {"SlotNo":"1","OldNo":"0","OldType":"0","NewNo":"40000001000000010447","NewType":"64"},
                         {"SlotNo":"2","OldNo":"0","OldType":"0","NewNo":"40001303004100000000","NewType":"96"}
                       ]
                    },
                    {"Position":"211","OldNo":"0","NewNo":"0",
                      "Info":
                       [
                       {"SlotNo":"0","OldNo":"20000050000000000000","OldType":"96","NewNo":"00000000000000000000","NewType":"96"},
                       {"SlotNo":"1","OldNo":"0","OldType":"0","NewNo":"40000001000000010449","NewType":"64"}
                       ]
                    }

                   ],
                  "code": 0,
                  "req": "api_v42_dev_sam",
                  "msg": "server ok"

              }
}

4、tools/read_more_json.py

import json
#打开json文件并获取文件流
class ReadJson(object):
    def __init__(self,filename):
        self.filepath="E:/python_code/test_api_case/data/" + filename
    def read_json(self):
        with open(self.filepath,"r", encoding="utf-8") as f:
    #调用load方法加载文件流
         return json.load(f)

5、run_suite.py

import time
import unittest

from test_oracle_14.tools.HTMLTestRunner import HTMLTestRunner

suite = unittest.defaultTestLoader.discover('./case_unit', pattern="test_*")
file_path="./report/{}.html".format(time.strftime("%Y_%m_%d %H_%M_%S"))
# file_path ="./report/{}.html".format(time.strftime("%Y_%m_%d %H_%M_%S"))# 文件名给了{},我们用format进行格式化
with open(file_path,'wb') as f:
    HTMLTestRunner(stream=f).run(suite)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017897.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号