初出茅庐——用python打出你的接口自动化测试第一枪(2)

   接下来,我们创建一个用例参数序列化组件,它包含3个部分:
1. 接口的参数序列化
2. Get和Post请求发送
3. 结果收集和分析

 

一.本章的重点:

       设计一个良好的序列化结构,将我们要在接口请求里携带发送的数据参数化保存,也就是对接口和参数进行剥离

通过学习第1篇教程,我们已经知道:
1.登录接口get_login的入参有2个,分别是user、password
2.用户名:user有3种可能值:[正确、错误、空]
3.登录密码:password有3种可能值:[正确、错误、空]

通过以上分析:

  • 接下来我们对登录接口设计一个测试用例:
    登录接口的参数中:user值是[正确]、password值也是[正确],该用例的预期即为“登录成功”。接口请求结束后,如果我们得到的panda_http_server返回的"result"字段值的确为200,就可得出结论:
    Pass————接口登录逻辑验证正确,该用例测试通过!
  • 如果返回的"result"字段值为502,这个结果代表登录失败,和这条用例的预期完全不同,那么可得出结论:
    Fail————接口登录逻辑验证异常,该用例测试失败!
    此时,你意识到哪里出问题了?是panda_http_server服务器的密码验证逻辑代码错误导致的bug?还是你的接口参数的确填错人为问题呢?不妨仔细思考一下吧~

二.代码实现

# -*- coding: utf-8 -*-
"""
@version: 1.0
@author: TerryJay 
@license: Apache Licence 2.0
@file: panda_parameter_sequence.py
@time: 2018/5/26 22:15
"""
import panda_request_test
import requests


"""
参数提取器:
1.按传入的param_number值来取出对应的字段
比如:serialize(0)  返回结果即为{"user":"panda","password":"12345"}
"""
def serialize(param_number):

	# 上一章可看到:get_login接口里"user"字段的所有可能值如下,为了简单演示,本次是直接写在函数里,在实际投入项目使用时,可以将其储存在数据库,方便管理
	user_params = {"user": [
		{"user-0": "panda"},
		{"user-1": "terry"},
		{"user-2": ""}]}

	# "password"字段的所有可能值
	password_params = {"password": [
		{"password-0": "12345"},
		{"password-1": "54321"},
		{"password-2": ""}]}

	if param_number == 0 or param_number < len(user_params["user"]):

		# 将user和password拼装起来,按字段param_number的值,依次返回对应的值,让接口执行器逐一读取执行
		return {
			"user": user_params['user'][param_number]["user-%s" % param_number],
			"password": password_params['password'][param_number]["password-%s" % param_number]
		}

	else:
		return None


def auto_get(get_url, get_body, get_headers):
	panda_get = requests.get(url=get_url, params=get_body, headers=get_headers)
	if panda_get.json()['result'] == '200':
		return True
	else:
		return False


def auto_post(post_url, post_data, get_headers):
	panda_post = requests.get(url=post_url, params=post_data, headers=get_headers)
	if panda_post.json()['result'] == '200':
		return True
	else:
		return False

# 以下是我对自己写的组件所做的单元测试,这也同时验证了panda_http_server服务的登录逻辑是否正确
if __name__ == '__main__':

	# 我们设计的参数一共有3组
	interface_args = 3

	# 创建一个用来保存“执行成功,接口的返回值和预期相同”的变量——success,它的初始值是0
	success = 0

	# 创建一个用来保存“执行失败,接口的返回值和预期不同”的变量——fail,它的初始值也是0
	fail = 0

	# 用for循环,逐个读取我们上面的设计好的序列化参数,取一次参数就立即发送给post_login登录接口,并且获取返回值
	for i in range(interface_args):
		param = serialize(i)

		# 判断一下读取到的参数是不是空的,如果是空就停止程序
		if param is None:
			print("您预设的接口参数个数'interface_args'不符实际!请修改正确后重试~")
			exit()
		else:
			# 判断auto_get函数执行结果,如果为True,就表示这条用例执行成功了,success自增1
			if auto_get(panda_request_test.panda_get_url, param, panda_request_test.panda_get_headers) is True:
				success += 1
			else:
				fail += 1
	print("总用例数-------", interface_args)
	print("Pass用例个数---", success)
	print("Fail用例个数---", fail)

"""
备注:
	这个专门保存参数的组件就初步完成了,以后在主控制函数里就可以直接import进去调用,后续还会进行功能扩展:
如:
1.加入多进程模式即可进行接口压测;
2.加入SQL组件将执行结果提交到数据库保存等,大家可以试着自行扩展,有问题请在下方留言
"""

 

执行结果

总用例数------- 3
Pass用例个数--- 1
Fail用例个数--- 2

 

   如果你已经能独立完成这2章的内容,那么,接口自动化已经正式向你敞开大门了,在这之后,你甚至可以加入一个炫酷的前台H5界面,在本地或者远程浏览器里来控制执行你的测试方案,是不是很诱人?在这个小项目里实现你的想法吧,行动起来总是会有收获,下一章继续更新!
传送门:渐入佳境——python接口自动化测试之实现mysql访问器(3)

版权归作者@TerryJay所有,转载请注明出处

猜你喜欢

转载自blog.csdn.net/qq_42183962/article/details/80466434