您的位置:

python接口自动化数据库版,python接口自动化常用库

本文目录一览:

python 的接口自动化测试使用的核心库是哪一个?

requests 库,requests是使用 Python 编写的,基于 urllib 实现,可以调用该库的部分 API 直接向服务器发送请求,并接收响应(角色定位: 相当于浏览器),一般可以在接口自动化测试时调用。当初在黑马程序员学的初级知识。

怎么搭建 python 的接口自动化测试框架?

1.框架搭建

1.1 将struts2中的jar文件导入到项目中

commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,freemarker-2.3.15.jar,ognl-2.7.3.jar

struts2-core-2.1.8.1.jar,xwork-core-2.1.6.jar

1.2 将struts.xml文件拷贝到项目的src目录下

1.3 修改web.xml文件

添加:

filter

filter-namestruts2/filter-name

filter-classorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter/filter-class

/filter

filter-mapping

filter-namestruts2/filter-name

url-pattern/*/url-pattern

/filter-mapping

2.action中方法的调用方式

2.1 自动方法调用(只能调用execute)

2.2 指定方法调用(通过设置action标签中的method属性)

2.3 动态方法调用(在调用时,在action后加!方法名称,如:login!deletUser)

注意:constant name="struts.enable.DynamicMethodInvocation" value="true" /

2.4 通配符调用

3. action接收客户端参数的方式

3.1 直接在action中定义参数变量,并生成set和get方法

3.2 定义接收参数的类

注意:都要为action的成员变量提供get和set方法

3.3 让action实现ModelDriven接口,并实现里面的getModel方法

4.获取request,session,application的方式

4.1 用ActionContext获取,实际上获取到的都是Map对象

4.2 用ServletActionContext获取,获取到的是基于Servlet API的对象

利用Python如何实现数据驱动的接口自动化测

这里考虑把API、参数、以及预期结果预行在格式化的CSV里保存,利用csv组件从CSV里读取URL、参数以及预期结果,Requests组件发起请求,将响应结果与预期结果进行比对,最后把比对结果写到结果CSV。

如何创建 python+requests接口自动化测试框架

工作原理: 测试用例在excel上编辑,使用第三方库xlrd,读取表格sheet和内容,sheetName对应模块名,Jenkins集成服务发现服务moduleName查找对应表单,运用第三方库requests请求接口,根据结果和期望值进行断言,根据输出报告判断接口测试是否通过。

1. 数据准备

数据插入(容易实现的测试场景下所需外部数据)

准备sql (接口需要重复使用,参数一定得是变量)

2.集成部署(运维相关了解即可)

平滑升级验证脚本加入自动化

3.自动化框架实现

调用mysql

excel遍历测试用例

requests实现接口调用

根据接口返回的code值和Excel对比

报告反馈

暴露服务

写一个简单登录的接口自动化测试

代码的分层如下图:

coding.png

一、写一个封装的获取excel表格的模块

excel.png

代码实现如下:

# !/usr/bin/python

# -*- coding: UTF-8 -*-

# 基础包:excel的封装

import xlrd

workbook = None

def open_excel(path):

"""打开excel"""

global workbook

if (workbook == None):

workbook = xlrd.open_workbook(path, on_demand=True)

def get_sheet(sheetName):

"""获取行号"""

global workbook

return workbook.sheet_by_name(sheetName)

def get_rows(sheet):

"""获取行号"""

return sheet.nrows

def get_content(sheet, row, col):

"""获取表格中内容"""

return sheet.cell(row, col).value

def release(path):

"""释放excel减少内存"""

global workbook

workbook.release_resources()

del workbook

代码封装后当成模块引用,这还是最开始呢。

二、引用log模块获取日志

准备工作:

需要一个日志的捕获,包括框架和源码抛出的expection。

代码如下:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

# 基础包:日志服务

import logging

import time

def getLogger():

global tezLogPath

try:

tezLogPath

except NameError:

tezLogPath = "/data/log/apiTest/"

FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'

# file = tezLogPath + time.strftime("%Y-%m-%d", time.localtime()) + ".log"

# logging.basicConfig(filename=file, level=logging.INFO, format=FORMAT)

# 开发阶段为了方便调试,可不输出到文件

logging.basicConfig(level=logging.INFO, format=FORMAT)

return logging

三、引用requests模块接口测试

准备工作:

需要的请求类型和执行测试的方法。

代码如下:

#!/usr/bin/python#

#-*- coding: UTF-8 -*-

# 基础包:接口测试的封装

import requests

import tezLog as log

logging = log.getLogger()

def api_test(method, url, data ,headers):

"""

定义一个请求接口的方法和需要的参数

:Args:

method - 企业名称 str

url - 用户昵称 str

data - 参数 str

headers - 请求头信息 dict

非RESTful API请求另外的请求类型实际用不到。也不安全。

"""

try:

if method == "post":

results = requests.post(url, data, headers=headers)

if method == "get":

results = requests.get(url, data, headers=headers)

# if method == "put":

# results = requests.put(url, data, headers=headers)

# if method == "delete":

# results = requests.delete(url, headers=headers)

# if method == "patch":

# results == requests.patch(url, data, headers=headers)

# if method == "options":

# results == requests.options(url, headers=headers)

response = results.json()

code = response.get("code")

return code

except Exception, e:

logging.error("service is error", e)

def run_test(sheet):

"""

定义一个执行和断言的方法

:Args:

sheet - 服务名称 str(excel页脚名称识别的)

"""

rows = excel.getRows(sheet)

fail = 0

for i in range(2, rows):

#这里为什么从第二行开始跑,因为会先执行SQL进行数据准备如之前Excel展示的空白位置

testData = excel.getContent(sheet, i, gl.CASE_DATA)

testUrl = excel.getContent(sheet, i, gl.CASE_URL)

testMethod = excel.getContent(sheet, i, gl.CASE_METHOD)

testHeaders = eval(excel.getContent(sheet, i, gl.CASE_HEADERS))

testCode = excel.getContent(sheet, i, gl.CASE_CODE)

actualCode = request.apiTest(testMethod, testUrl, testData, testHeaders)

expectCode = str(int(testCode))

failResults = ' url: ' + testUrl + ' params: ' + testData + ' actualCode: ' + actualCode + ' expectCode: ' + expectCode

if actualCode == expectCode:

logging.info("pass")

elif actualCode != expectCode:

logging.info("fail %s", failResults)

fail += 1

if fail 0 :

return False

return True

四、关于参数中gl模块

准备工作:

所有的参数和常量我们会整理到这个文件中,因为设计业务和服务密码、数据库密码这里展示一部分。

代码如下:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

# 脚本功能:全部变量

import time

import uuid

CASE_NUMBER = 0 # 用例编号

CASE_NAME = 1 # 用例名称

CASE_DATA = 2 # 用例参数

CASE_URL = 3 # 用例接口地址

CASE_METHOD = 4 # 用例请求类型

CASE_CODE = 5 # 用例code

CASE_HEADERS = 6 # 用例headers

SQL_ROW = 0 # 预执行SQL的行号

SQL_COL = 1 # 预执行SQL的列号

五、写一个run文件:只是用来执行的,业务和代码剥离。

代码如下:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

# 验证包:接口测试脚本

import sys

import core.tezLog as log

import function.common as common

logging = log.getLogger()

"""1.外部输入参数"""

path = sys.path[0] # 当前路径

module = sys.argv[1] # 服务模块名

url = sys.argv[2] # 服务地址

host = sys.argv[3] # 数据库地址

user = sys.argv[4] # 数据库用户名

password = sys.argv[5] # 数据库密码

db = sys.argv[6] # 数据库名称

"""2.根据module获取Sheet"""

logging.info("-------------- Execute TestCases ---------------")

sheet = common.get_excel_sheet(path + "/" + common.filename, module)

"""3.数据准备"""

logging.info("-------------- Prepare data through MysqlDB --------------")

sql = common.get_prepare_sql(sheet)

common.prepare_data(host=host, user=user, password=password, db=db, sql=sql)

"""4.执行测试用例"""

res = common.run(sheet, url)

logging.info("-------------- Get the result ------------ %s", res)

"""这里的res是我们平滑升级的时候需要返回结果为TRUE才会继续下面走。"""

六、查看测试报告(部署到jenkins会通过控制台查看)

怎么基于python实现接口自动化

若是WEB-UI,或许可以考虑使用 splinter 或直接使用 selenium 而假如是WIN-UI,那么就通过获取目标句柄后设置相应数据;或者直接模拟系统的键盘输入。