接口自動(dòng)化-01

一、讀取Excel表格,以字典表方式存入all_case_datas列表中
from openpyxl import load_workbook

class DoExcel:

    def Excel(a):
        wb = load_workbook('/Users/xiaolongxia/PycharmProjects/api_test/text.xlsx')
        sheet = wb.get_sheet_by_name(a)
        all_case_datas=[]
        for i in  range(2,sheet.max_row+1):
            case_data={}
            case_data["url"]=sheet.cell(row=i,column=1).value
            case_data["request_data"]=sheet.cell(row=i,column=2).value
            case_data["method"]=sheet.cell(row=i,column=3).value
            case_data["expected_data"]=sheet.cell(row=i,column=4).value
            if sheet.cell(row=i,column=5).value is not None:
                case_data['related_exp']=sheet.cell(row=i,column=5).value
            all_case_datas.append(case_data)
        return all_case_datas


print(DoExcel.Excel('api_test'))
image.png

運(yùn)行結(jié)果


image.png
二、創(chuàng)建http請(qǐng)求類
import requests

class Req():

    def muRequest(url, request_data, method):
        #判斷數(shù)據(jù)是否為空如果不為空則轉(zhuǎn)換為字典
        if request_data is not None:
            request_data = eval(request_data)
        if method == 'get':
            res = requests.get(url, request_data,verify=False)
            print(res.text)
        if method == 'post':
            res = requests.post(url, request_data,verify=False)
            print(res.text)
        else:
            print("填寫(xiě)的不對(duì)吧!~~")
        return res

三、調(diào)用


import DoExcel
import my_Request
import unittest
import ddt
import re

doexcel=DoExcel.DoExcel.Excel('api_test')
global_vars={}
print(doexcel)

@ddt.ddt
class Test_Api(unittest.TestCase):

    @ddt.data(*doexcel)
    def test_api(self,case_data):
        global global_vars  #設(shè)置全局變量

        print("1111111")
        #動(dòng)態(tài)替換,判斷請(qǐng)求參數(shù)中是否有需要替換全局變量的值
        if len(global_vars) > 0 and case_data['request_data'] is not None:
            for key,value in global_vars.items():
                if case_data['request_data'].find(key)!=-1:
                    case_data['request_data']=case_data['request_data'].replace(key,value)
#Python 字典(Dictionary) items() 函數(shù)以列表返回可遍歷的(鍵, 值) 元組數(shù)組。
#Python find() 方法檢測(cè)字符串中是否包含子字符串 str ,如果指定 beg(開(kāi)始) 和 end(結(jié)束) 范圍,則檢查是否包含在指定范圍內(nèi),如果包含子字符串返回開(kāi)始的索引值,否則返回-1。
#Python replace() 方法把字符串中的 old(舊字符串) 替換成 new(新字符串),如果指定第三個(gè)參數(shù)max,則替換不超過(guò) max 次。

        print(case_data['expected_data'])
        res=my_Request.Req.muRequest(case_data['url'],case_data['request_data'],case_data['method'])
        print("。。。。。。。。。。。")
        print(case_data['request_data'])
        print(res.text)
        print(type(case_data['expected_data']))

        #正則匹配響應(yīng)結(jié)果的值,放置在全局變量中
        if 'related_exp' in case_data.keys():
            temp=case_data['related_exp'].split("=")
            tem=re.findall(temp[1],res.text)
            print("提取的p為:"+str(tem))
            print(temp[0])
            print(tem[0])
            global_vars[temp[0]]=tem[0]
            print(global_vars)
#Python split() 通過(guò)指定分隔符對(duì)字符串進(jìn)行切片,如果參數(shù) num 有指定值,則僅分隔 num 個(gè)子字符串
#正則 re.findall  的簡(jiǎn)單用法(返回string中所有與pattern相匹配的全部字串,返回形式為數(shù)組),findall(pattern, string, flags=0)




        #響應(yīng)斷言
        try:
            self.assertIn(case_data['expected_data'],res.text)
            print("匹配成功")
        except AssertionError:
            print("匹配失敗")
            raise  AssertionError
#        res=my_Request.Req(case_data["url"],case_data["method"],case_data["request_data"])
#        print(res.text)

#__name__ 只當(dāng)前py文件調(diào)用方式的方法
if __name__ == '__main__':
    unittest.main()

結(jié)果:


image.png

未完待續(xù)

  • 備注:使用 sheet=wb.get_sheet_by_name('frequency')方法會(huì)有錯(cuò)誤警告所以將該方法修改為 sheet=wb["frequency"]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,695評(píng)論 0 5
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    草里有只羊閱讀 18,531評(píng)論 0 85
  • 1.越強(qiáng)大的事物,越是難以用語(yǔ)言描述。 比如說(shuō)終極智慧,比如說(shuō)真理。威爾.杜蘭特在《哲學(xué)的故事》序言中說(shuō),也許人們...
    小偉_f152閱讀 748評(píng)論 4 2
  • 要說(shuō)國(guó)內(nèi)最著名的影視城,鎮(zhèn)北堡可以算一個(gè)?!赌榴R人》、《紅高粱》、《大話西游》、《刺陵》、《錦衣衛(wèi)》等近百部影片都...
    攜程攻略社區(qū)閱讀 578評(píng)論 0 0

友情鏈接更多精彩內(nèi)容