jmeter

python执行excel中的case

2019-10-10  本文已影响0人  小鱿鱼Gun神

封装常量

当用excle来写用例时,首选要拿到用例行数,再去拿url、请求方式、header、依赖数据、请求数据等等。拿出数据之后根据一定的逻辑判断将其组合在一起去执行case,所以我们需要一个地方来存放常量,根据常量去把对应单元格数据拿到,然后再进行数据拼接。

首先定义一个地方来存放常量,新建一个数据包(data)存放所有数据,然后再创建一个存放常量的文件data_config.py


数据包.png

在data_config.py文件中创建一个类,类定义成变量形式,去调用

#coding:utf-8

class global_var:
    #case_id
    Id='0'
    request_name = '1'
    url='2'
    run='3'
    method='4'
    header='5'
    case_depend='6'
    data_depend='7'
    filed_depend='8'
    data='9'
    excpect='10'
    result='11'

#获取caseid
def get_id():
    return global_var.Id

#获取url
def get_url():
    return global_var.url

#获取是否执行
def get_run():
    return global_var.run

#获取请求方式
def get_method():
    return global_var.method

#获取head
def get_header():
    return  global_var.header

#获取依赖id
def get_case_depend():
    return  global_var.case_depend

#获取依赖数据
def get_data_depend():
    return global_var.data_depend

#获取依赖所属字段
def get_filed_depend():
    return  global_var.filed_depend

#获取请求数据
def get_data():
    return  global_var.data

#获取预期结果
def get_excepet():
    return global_var.excpect

#获取实际结果
def get_result():
    return  global_var.result

def get_header_value():
    header={
        "Authorization": "****"

    }

获取excle数据

excle用例.png

其中请求数以json格式存放到json文件,如:


json.png

封装一个类去操作json文件,文件名operation_json.py

#coding:utf-8
import json

class OperetionJson:
    def __init__(self):
        self.data=self.read_data()

    #读取json文件
    def read_data(self):
        with open('../dataconfig/data.json') as fp:
            data= json.load(fp)
            return data

    #根据关键字获取数据
    def get_data(self,id):
        return self.data[id]

if __name__ == '__main__':
    opjson = OperetionJson()
    opjson.get_data(id)

新建一个获取数据的文件get_data.py,将获取接口数据的方法封装成类

#coding:utf-8
from util.operation_excel import OperationExcel
import data.data_config
from util.operation_json import OperetionJson

class GetData:
    def __init__(self):
        self.opera_excle =OperationExcel()

    #获取excle行数,就是case个数
    def get_case_lines(self):
        return self.opera_excle.get_lins()

    #获取是否执行,row对应行
    def get_is_run(self,row):
        flag = None
        #获取列
        col=int(data.data_config.get_run())
        run_model = self.opera_excle.get_cell_value(row,col)
        #判断是否执行
        if run_model=='yes':
            flag = True
        else:
            flag = False
        return flag
    #是否携带header
    def is_header(self,row):
        col=int(data.data_config.get_header())
        header=self.opera_excle.get_cell_value(row,col)
        if header=='yes':
            return data.data_config.get_header_value()
        else:
            return None
    #获取请求方式
    def get_request_method(self,row):
        col=int(data.data_config.get_method())
        request_method=self.opera_excle.get_cell_value(row,col)
        return request_method

    #获取url
    def get_request_url(self,row):
        col=int(data.data_config.get_url())
        url=self.opera_excle.get_cell_value(row,col)
        return url

    #获取请求数据
    def get_request_data(self,row):
        col = int(data.data_config.get_data())
        r_data = self.opera_excle.get_cell_value(row,col)
        if r_data == '':
            return None
        return r_data

    #通过获取关键字拿到data数据
    def get_data_for_json(self,row):
        opera_json = OperetionJson()
        #通过请求数据get_request_data单元格数据获取对应json数据
        request_data = opera_json.get_data(self.get_request_data(row))
        return request_data

    #获取预期结果
    def get_expect_data(self,row):
        col = int(data.data_config.get_excepet())
        expect = self.opera_excle.get_cell_value(row,col)
        if expect == '':
            return None
        return expect




post、get基类封装

在数据包(base)下创建文件runmethod.py

#coding:utf-8
import requests

class RunMethod:
    def post_main(self,url,data,header=None):
        res = None
        if header !=None:
            res = requests.post(url=url,data=data,headers=header).json()
        else:
            res = requests.post(url=url,data=data).json()
        return res

    def get_main(self,url,header,data=None):
        res = None
        if header != None:
            res = requests.get(url=url, data=data, headers=header).json()
        else:
            res = requests.get(url=url, data=data).json()
        return res

    def run_main(self,method,url,data,header):
        res = None
        if method == 'post':
            res = self.post_main(url,data,header)
        else:
            res = self.get_main(url,data,header)
        return res

封装好后我们要怎么去执行我们的主流程呢?接下来需要进行主流程封装,在数据包(main)下,创建文件run_test.py

# coding:utf-8
import sys

sys.path.append("F:/project/untitled")
from base.runmethod import RunMethod
from data.get_data import GetData


class RunTest:
    def __init__(self):
        self.run_method = RunMethod()
        self.data = GetData()

    # 程序执行主入口
    def go_on_run(self):
        rs = ""
        # 获取excel行数,即case个数
        rows_count = self.data.get_case_lines()
        # 循环执行case
        for i in range(1,rows_count):
            res=""
            url = self.data.get_request_url(i)
            method = self.data.get_request_method(i)
            is_run = self.data.get_is_run(i)
            data = self.data.get_data_for_json(i)  # 请求数据存放在json文件
            header = self.data.is_header(i)
            if is_run:
                # 传入参数顺序与runmethod.py文件中run_main方法入参一致
                res = self.run_method.run_main(method, url, data, header)
            rs+=str(res)+'\n'
        return rs


if __name__ == '__main__':
    run = RunTest()
    print(run.go_on_run())


执行程序,运行结果如下:


运行结果.png
上一篇下一篇

猜你喜欢

热点阅读