接口自动化测试学习 —— 框架设计

如果有100个测试用例,重复的去写,如果验证的较多参数,这种情况下该如何做?copy后期会很大,管理很困难

1.根据case设计接口自动化框架

根据项目业务接口来编写一个excel

case编号作用是否执行前置条件urlmethoddatacookie操作预期结果方式预期结果
caichen_001获取广告位yesapi3/getbanneradvertver2post{"username":"111111"}yesmec
caichen_002测试yescaichen_001api3/beta4post{"username":"111112"}noerrorcode1006
caichen_003新课程yesapi3/newcourseskillpost{"username":"111113"}writejson
caichen_004评价yesapi3/getdownrecommendpost{"username":"111114"}nojson
caichen_005课程信息yesapi3/getcourseintropost{"username":"111115"}nojson
caichen_006播放列表yesapi3/getmedialistpost{"username":"111116"}nojson
caichen_007课程列表yesapi3/courselistinfopost{"username":"111117"}nojson

2.对excel操作进行封装

  • 安装库pip install openpyxl
#handle_cookie.py
import openpyxl
from openpyxl import workbook
import sys
from collections.abc import Iterable
import os
base_path = os.getcwd()
sys.path.append(base_path)

class HandExcel:
    def load_excel(self):
        '''
        加载excel
        '''

        open_excel = openpyxl.load_workbook(base_path+"/Case/caichen.xlsx")
        return open_excel

    def get_sheet_data(self,index=None):
        '''
        加载所有sheet的内容
        '''
        sheet_name = self.load_excel().sheetnames
        if index == None:
            index = 0
        data = self.load_excel()[sheet_name[index]]
        return data
    
    def get_cell_value(self,row,cols):
        '''
        获取某一个单元格内容
        '''
        data = self.get_sheet_data().cell(row=row,column=cols).value
        return data
    
    def get_rows(self):
        '''
        获取行数
        '''
        row = self.get_sheet_data().max_row
        return row
    
    def get_rows_value(self,row):
        '''
        获取某一行的内容
        '''
        row_list = []
        for i in self.get_sheet_data()[row]:
            row_list.append(i.value)
        return row_list


    def excel_write_data(self,row,cols,value):
        '''
        写入数据
        '''
        wb = self.load_excel()
        wr = wb.active
        wr.cell(row,cols,value)
        wb.save(base_path+"/Case/caichen.xlsx")


    def get_columns_value(self,key=None):
        '''
        获取某一列得数据
        '''
        columns_list = []
        if key==None:
            key = 'A'
        columns_list_data = self.get_sheet_data()[key]
        for i in columns_list_data:
            columns_list.append(i.value)
        return columns_list

    def get_rows_number(self,case_id):
        '''
        获取行号
        '''
        num = 1
        cols_data = self.get_columns_value()
        for col_data in cols_data:
            if case_id == col_data:
                return num
            num = num+1
        return num
    
    def get_excel_data(self):
        '''
        获取excel里面所有的数据
        '''
        data_list = []
        for i in range(self.get_rows()):
            data_list.append(self.get_rows_value(i+2))
        
        return data_list
    
excel_data = HandExcel()

if __name__ == "__main__":
    handle = HandExcel()
    ##print(handle.get_rows_number('caichen_001'))
    print(handle.get_excel_data())
复制代码

3.模型搭建

#coding=utf-8
import sys
import os
base_path = os.getcwd()
sys.path.append(base_path)
from collections.abc import Iterable
from Util.handle_excel import excel_data
import json
from Util.handle_header import get_header
from Util.handle_result import handle_result,handle_result_json,get_result_json
from Util.handle_cookie import write_cookie,get_cookie_value
from Util.codition_data import get_data
from Base.base_request import request
#['caichen_001', '登陆', 'yes', None, 'login', 'post', '{"username":"111111"}', 'yes', 'message', None]
class RunMain:
    def run_case(self):
        """获取所有行数"""
        rows = excel_data.get_rows()
        for i in range(rows):
            cookie=None
            get_cookie = None
            header = None
            depend_data = None
            data = excel_data.get_rows_value(i+2)
            is_run = data[2]
            if is_run == 'yes':
                is_depend = data[3]
                data1 = json.loads(data[7])
                if is_depend:
                    '''
                    获取依赖数据
                    '''
                    depend_key = data[4]
                    depend_data = get_data(is_depend)
                    #print(depend_data)
                    data1[depend_key] = depend_data

                method = data[6]
                url = data[5]
                
                is_header = data[9]
                excepect_method = data[10]
                excepect_result = data[11]
                cookie_method = data[8]
                if cookie_method == 'yes':
                    cookie = get_cookie_value('app')
                if cookie_method == 'write':
                    '''
                    必须是获取到cookie
                    '''
                    get_cookie={"is_cookie":"app"}
                if is_header == 'yes':
                    header = get_header()
                res = request.run_main(method,url,data1,cookie,get_cookie,header)
                #print(res)
                code = str(res['errorCode'])
                message = res['errorDesc']
                if excepect_method == 'mec': 
                    config_message = handle_result(url,code)
                    if message == config_message:
                        excel_data.excel_write_data(i+2,13,"通过")
                    else:
                        excel_data.excel_write_data(i+2,13,"失败")
                        excel_data.excel_write_data(i+2,14,json.dumps(res))
                if excepect_method == 'errorcode':
                    if excepect_result == code:
                        excel_data.excel_write_data(i+2,14,"通过")
                    else:
                        excel_data.excel_write_data(i+2,13,"失败")
                        excel_data.excel_write_data(i+2,14,json.dumps(res))
                if excepect_method == 'json':
                    if code == 1000:
                        status_str='sucess'
                    else:
                        status_str='error'
                    excepect_result = get_result_json(url,status_str)
                    result = handle_result_json(res,excepect_result)
                    if result:
                        excel_data.excel_write_data(i+2,13,"通过")
                    else:
                        excel_data.excel_write_data(i+2,13,"失败")
                        excel_data.excel_write_data(i+2,14,json.dumps(res))   
                
if __name__ == "__main__":
    run = RunMain()
    run.run_case()

复制代码

4.获取配置信息

  • 新建server.ini配置信息
[server]
host=http://www.caichen.com/
username=Wangcaichen
password=阿GG
is_run=3
复制代码
  • 安装库 pip install configparser读取配置文件
#coding=utf-8
import sys
import os
import configparser
base_path = os.getcwd()
sys.path.append(base_path)
class HandleInit:

    def load_ini(self):
        file_path = base_path+"/Config/server.ini"
        cf = configparser.ConfigParser()
        cf.read(file_path,encoding="utf-8-sig")
        return cf
    
    def get_value(self,key,node=None):
        '''
        获取ini里面的value
        '''
        if node == None:
            node = 'server'
        cf = self.load_ini()
        try:
            data = cf.get(node,key)
        except Exception:
            print("没有获取到值")
            data = None
        return data

handle_ini = HandleInit() 
if __name__ == "__main__":
    hi = HandleInit()
    print(hi.get_value("password"))
复制代码

5.项目通过配置文件获取host

# base_request.py
import sys
import os
import configparser
base_path = os.getcwd()
sys.path.append(base_path)
import requests
import json
from Util.handle_cookie import write_cookie
from Util.handle_json import get_value
from Util.handle_init import handle_ini

class BaseRequest:
    def send_post(self,url,data,cookie=None,get_cookie=None,header=None):
        '''
        发送post请求
        '''
        response = requests.post(url=url,data=data,cookies=cookie,headers=header)
        if get_cookie !=None:
            '''
            {"is_cookie":"app"}
            '''
            cookie_value_jar =  response.cookies
            cookie_value = requests.utils.dict_from_cookiejar(cookie_value_jar)
            write_cookie(cookie_value,get_cookie['is_cookie'])
        res = response.text
        return res
    
    def send_get(self,url,data,cookie=None,get_cookie=None,header=None):
        '''
        发视get请求
        '''
        response = requests.get(url=url,params=data,cookies=cookie,headers=header)
        if get_cookie !=None:
            cookie_value_jar = response.cookie
            cookie_value = requests.utils.dict_from_cookiejar(cookie_value_jar)
            write_cookie(cookie_value,get_cookie['is_cookie'])

        res = response.text
        return res
    
    def run_main(self,method,url,data,cookie=None,get_cookie=None,header=None):
        '''
        执行方法,传递method、url、data参数
        '''
        #return get_value(url)
        base_url = handle_ini.get_value('host')
        if 'http' not in url:
            url = base_url+url
        
        if method == 'get':
            res = self.send_get(url,data,cookie,get_cookie,header)
        else:
            res = self.send_post(url,data,cookie,get_cookie,header)
        try:
            res = json.loads(res)
        except:
            print("这个结果是一个text")
        print("--->",res)
        return res

    
    
request = BaseRequest() 
if __name__ == "__main__":
    request = BaseRequest() 
    request.run_main('get','http://www.baidu.com/login',"{'username':'11111'}")
复制代码

好了各位,以上就是这篇文章的全部内容了,能看到这里人啊,都是人才。

END绵薄之力

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

加入我的软件测试交流群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

获取方式 :

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值