python接口自动化脚本
‘壹’ 怎么用python做自动化测试
1新建一台Jenkins服务器,安装并配置好Jenkins2配置一个自动化测试脚本的代码库,可以使用Git或者SVN等版本控制工具。然后在Jenkins服务器上配置一个Job,负责自动的同步最新代码到Jenkins服务器上。3配置要跑自动化测试的虚拟机VM,推荐干净环境下安装需要跑自动化测试的依赖软件工具或者配置以及自动化测试工具(不提前安装配置也行,可以在跑自动化之前用另外的脚本自动安装配置),配置好之后关机并打一个snapshot镜像快照,并命名为prebuild或其它。4新建一个JenkinsJob,用来跑自动化。配置需要连接并使用的自动化测试虚拟机,配置要构建的自动化测试框架xml脚本文件(后面步骤有说明)和target,以及要归档的测试报告,邮件发送等等。5接下来的重点就是自动化测试框架的xml脚本文件了,首先里面定义一个target,负责获取自动化测试对象的安装包。6接着定义一个target(可选),负责从版本库上获取自动化测试脚本同步到Jenkins服务器上(也可以直接使用JenkinsJob本身的插件配置来获取代码)。7定义一个target,负责连接到虚拟机服务器,并恢复到虚拟机的原始状态例如prebuild,然后开机8定义一个target,负责拷贝项目产品安装包和自动化测试源代码到目标虚拟机上。9定义一个target,负责连接到目标测试虚拟机,并打开自动化测试工具,然后运行自动化测试脚本10定义一个target,负责处理自动化测试报告文件和日志文件并把它们从自动化测试虚拟机拷贝到Jenkins服务器对应的Job工作空间下。11最后定义一个主target,按照上面的target流程依次调用。这个主target就是Jenkins服务器上的自动化测试Job中配置的需要构建的Target。
‘贰’ 【python接口自动化】在业务流程特别长的情况下,如何设计接口自动化
wsvcu你能知道自己想要的是什么就问题不是很大,不错的就可以了用手机
‘叁’ 如何搭建python自动化测试框架
1
新建一台Jenkins服务器,安装并配置好Jenkins
2
配置一个自动化测试脚本的代码库,可以使用Git或者SVN等版本控制工具。然后在Jenkins服务器上配置一个Job,负责自动的同步最新代码到Jenkins服务器上。
3
配置要跑自动化测试的虚拟机VM,推荐干净环境下安装需要跑自动化测试的依赖软件工具或者配置以及自动化测试工具(不提前安装配置也行,可以在跑自动化之前用另外的脚本自动安装配置),配置好之后关机并打一个snapshot镜像快照,并命名为prebuild或其它。
4
新建一个Jenkins Job,用来跑自动化。配置需要连接并使用的自动化测试虚拟机,配置要构建的自动化测试框架xml脚本文件(后面步骤有说明)和target,以及要归档的测试报告,邮件发送等等。
5
接下来的重点就是自动化测试框架的xml脚本文件了,首先里面定义一个target,负责获取自动化测试对象的安装包。
6
接着定义一个target(可选),负责从版本库上获取自动化测试脚本同步到Jenkins服务器上(也可以直接使用Jenkins Job本身的插件配置来获取代码)。
7
定义一个target,负责连接到虚拟机服务器,并恢复到虚拟机的原始状态例如prebuild,然后开机
8
定义一个target,负责拷贝项目产品安装包和自动化测试源代码到目标虚拟机上。
9
定义一个target,负责连接到目标测试虚拟机,并打开自动化测试工具,然后运行自动化测试脚本
10
定义一个target,负责处理自动化测试报告文件和日志文件并把它们从自动化测试虚拟机拷贝到Jenkins服务器对应的Job工作空间下。
11
最后定义一个主target,按照上面的target流程依次调用。这个主target就是Jenkins服务器上的自动化测试Job中配置的需要构建的Target。
‘肆’ it外包为什么问培训出来的
1、看简历。如果简历吹得天花乱坠,啥都懂啥都会。很可能虚假。如果只工作了1年,却写了3个以上的项目,十有八九是培训班包装的。
2、面试。面试追问,要求应聘者举例,很容易就发现漏洞。尤其是针对简历里的某一句或几句话,要求应聘者解释澄清,一知半解的应聘者很容易被发现破绽。
(4)python接口自动化脚本扩展阅读:对于面试官看简历是否是包装出来的还是培训后出来的一般来说无非就是几点
1。看简历上的公司
一般来说第一家公司要么是外包公司要么是小公司(不知名的)的工作项目经验与实际入职公司项目不一致多半是培训出来的,因为你没有实际参与项目所以不知道公司具体的项目所以会认出来
2。看会使用的技能
3。工作年限
2跟3放一起回答,例如你的工作经验是1-3年但是你写的所会的技能全部写的精通这样的一般都是包装出来的。1.加入你写的熟练使用python+selenium编写自动化脚本,2.熟练使用jmeter、postman进行性能测试。3.独立完成项目的接口自动化脚本编写。一般小公司都不会用到UI自动测试跟接口自动化测试。性能测试的话一般也就是简单的性能测试不会进行大规模的性能测试也不可能把一个新人独立放在这么重要的位置。
4。在有就是通过现场面试来判断
1。先看项目经验,然后让你介绍这个项目,对于面试官来说,面试官第一次遇见这个项目让你介绍这个项目,你在公司工作这么久肯定是对这个项目非常了解,你要用自己的方式来讲解让面试官了解这个项目。
2。你在项目中用到的什么工作在那个阶段用到的为什么会用到这个工具为什么不会选择其他的工具这个要明白。
3。你在这个项目中担任的是么角色,你做出了什么突出的贡献。
对于包装出来的简历或培训出来的简历一般这么一问就能问的出来。还有就是面试官会围绕着你简历中写的熟练的技能会问。
如果简历筛选没有看出问题就是现场面试,现场面试没有难住的话要么是真有这方面的经验要么是在自己简历中下功夫努力学习了。
希望我的回答可以帮到你,望采纳,谢谢!
‘伍’ python能够做软件的自动化测试吗
可以,Python是可以做自动化测试的。
目前,Python自动化测试开始逐渐替代传统的软件测试,吸取了功能、性能、接口、自动化等专项测试领域的优势,以后将在多个领域渐渐成为国内大部分质量控制、质量管理的首选,而且已经有很多公司使用Python自动化测试框架。
‘陆’ 如何创建 python+requests接口自动化测试框架
工作原理: 测试用例在excel上编辑,使用第三方库xlrd,读取表格sheet和内容,sheetName对应模块名,Jenkins集成服务发现服务moleName查找对应表单,运用第三方库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] # 当前路径
mole = sys.argv[1] # 服务模块名
url = sys.argv[2] # 服务地址
host = sys.argv[3] # 数据库地址
user = sys.argv[4] # 数据库用户名
password = sys.argv[5] # 数据库密码
db = sys.argv[6] # 数据库名称
"""2.根据mole获取Sheet"""
logging.info("-------------- Execute TestCases ---------------")
sheet = common.get_excel_sheet(path + "/" + common.filename, mole)
"""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自动化脚本怎么编写
首先你需要在北鲲云超算上申请python这款软件,然后选择配置后就可以直接开始作业了,运行软件后就可以开始搭建脚本界面,编写脚本代码,用超算跑作业很方便,直接线上就可以使用,不需要下载到本地,而且计算效率非常的高。
‘捌’ 使用python做接口自动化测试容易吗
为什么要做接口自动化测试?
在当前互联网产品迭代频繁的背景下,回归测试的时间越来越少,很难在每个迭代都对所有功能做完整回归。但接口自动化测试因其实现简单、维护成本低,容易提高覆盖率等特点,越来越受重视。
为什么要自己写框架呢?
使用Postman调试通过过直接可以获取接口测试的基本代码,结合使用requets + unittest很容易实现接口自动化测试的封装,而且requests的api已经非常人性化,非常简单,但通过封装以后(特别是针对公司内特定接口),可以进一步提高脚本编写效率。
一个现有的简单接口例子
下面使用requests + unittest测试一个查询接口
接口信息如下
请求信息:
Method:POST
URL:api/match/image/getjson
Request:
{
"category": "image",
"offset": "0",
"limit": "30",
"sourceId": "0",
"metaTitle": "",
"metaId": "0",
"classify": "unclassify",
"startTime": "",
"endTime": "",
"createStart": "",
"createEnd": "",
"sourceType": "",
"isTracking": "true",
"metaGroup": "",
"companyId": "0",
"lastDays": "1",
"author": ""
}
Response示例:
{
"timestamp" : xxx,
"errorMsg" : "",
"data" : {
"config" : xxx
}
Postman测试方法见截图:
测试思路
1.获取Postman原始脚本
2.使用requests库模拟发送HTTP请求**
3.对原始脚本进行基础改造**
4.使用python标准库里unittest写测试case**
原始脚本实现
未优化
该代码只是简单的一次调用,而且返回的结果太多,很多返回信息暂时没用,示例代码如下
import requests
url = "http://cpright.xinhua-news.cn/api/match/image/getjson"
querystring = {"category":"image","offset":"0","limit":"30","sourceId":"0","metaTitle":"","metaId":"0","classify":"unclassify","startTime":"","endTime":"","createStart":"","createEnd":"","sourceType":"","isTracking":"true","metaGroup":"","companyId":"0","lastDays":"1","author":""}
headers = { 'cache-control': "no-cache", 'postman-token': "e97a99b0-424b-b2a5-7602-22cd50223c15"
}
response = requests.request("POST", url, headers=headers, params=querystring)
print(response.text)
优化 第一版
调整代码结构,输出结果Json出来,获取需要验证的response.status_code,以及获取结果校验需要用到的results['total']
#!/usr/bin/env python#coding: utf-8'''
unittest merchant backgroud interface
@author: zhang_jin
@version: 1.0
@see:http://www.python-requests.org/en/master/
'''import unittestimport jsonimport tracebackimport requests
url = "http://cpright.xinhua-news.cn/api/match/image/getjson"
querystring = { "category": "image", "offset": "0", "limit": "30", "sourceId": "0", "metaTitle": "", "metaId": "0", "classify": "unclassify", "startTime": "", "endTime": "", "createStart": "", "createEnd": "", "sourceType": "", "isTracking": "true", "metaGroup": "", "companyId": "0", "lastDays": "1", "author": ""
}
headers = { 'cache-control': "no-cache", 'postman-token': "e97a99b0-424b-b2a5-7602-22cd50223c15"
}#Post接口调用
response = requests.request("POST", url, headers=headers, params=querystring)#对返回结果进行转义成json串
results = json.loads(response.text)#获取http请求的status_codeprint "Http code:",response.status_code#获取结果中的total的值print results['total']#print(response.text)
优化 第二版
接口调用异常处理,增加try,except处理,对于返回response.status_code,返回200进行结果比对,不是200数据异常信息。
#!/usr/bin/env python#coding: utf-8'''
unittest merchant backgroud interface
@author: zhang_jin
@version: 1.0
@see:http://www.python-requests.org/en/master/
'''import jsonimport tracebackimport requests
url = "http://cpright.xinhua-news.cn/api/match/image/getjson"
querystring = { "category": "image", "offset": "0", "limit": "30", "sourceId": "0", "metaTitle": "", "metaId": "0", "classify": "unclassify", "startTime": "", "endTime": "", "createStart": "", "createEnd": "", "sourceType": "", "isTracking": "true", "metaGroup": "", "companyId": "0", "lastDays": "1", "author": ""
}
headers = { 'cache-control': "no-cache", 'postman-token': "e97a99b0-424b-b2a5-7602-22cd50223c15"
}try: #Post接口调用
response = requests.request("POST", url, headers=headers, params=querystring) #对http返回值进行判断,对于200做基本校验 if response.status_code == 200:
results = json.loads(response.text) if results['total'] == 191: print "Success" else: print "Fail" print results['total'] else: #对于http返回非200的code,输出相应的code raise Exception("http error info:%s" %response.status_code)except:
traceback.print_exc()