python - 接口自动化测试 - TestRegister - 注册接口测试用例

# -*- coding:utf-8 -*- '''
@project: ApiAutoTest
@author: Jimmy
@file: test_register.py
@ide: PyCharm Community Edition
@time: 2018-12-28 15:50
@blog: https://www.cnblogs.com/gotesting/ ''' import unittest
import os
from ddt import ddt,data
from Common.http_request import HttpRequest
from Common.read_excel import ReadExcel
from Common.read_config import ReadConfig
from Common.mysql_util import MysqlUtil
from Common.get_logger import GetLog
from Common.basic_data import DoRegex,Context
from Common.contants import *
import json
import re # 读取配置文件,获取当前URL前缀,用于灵活更换测试服务器地址
read_config = ReadConfig()
url_pre = read_config.get_config_str('api','url_pre') # 读取excel,获取login测试数据
data_dir = os.path.join(data_dir,'test_data.xlsx')
read_excel = ReadExcel(data_dir)
register_cases = read_excel.get_cases('register') get_log = GetLog() @ddt
class TestRegister(unittest.TestCase): @classmethod
def setUpClass(cls):
global max_mobilephone
mysql = MysqlUtil()
sql = 'SELECT MobilePhone FROM future.member WHERE MobilePhone != "" ORDER BY MobilePhone DESC LIMIT 1;'
sql_resp = mysql.fetch_one(sql)
if sql_resp is not None:
max_mobilephone = sql_resp['MobilePhone']
get_log.log_info(' the max_mobilephone from mysql is {0}'.format(max_mobilephone))
else:
max_mobilephone = 15964506666
get_log.log_info(' the max_mobilephone from mysql is None , we use {0}'.format(max_mobilephone)) @classmethod
def tearDownClass(cls):
pass @data(*register_cases)
def test_resister(self,case):
url = url_pre + case.url # 使用正则表达式 匹配 读取的case.data中的mobilephone,匹配成功后,将查询数据库获取的最大mobilephone+1 赋值给 case.data中的mobilephone,以防注册手机号重复
data = json.loads(case.data)
register_user = int(max_mobilephone) + 1
if re.findall(pattern='\$\{(.*?)\}',string=data['mobilephone']):
data['mobilephone'] = register_user # 记录当前测试case信息
get_log.log_info('''Test Case Info:
case_id : {0}
title : {1}
method : {2}
url : {3}
data : {4}
expected: {5}
'''.format(case.case_id,case.title,case.method,url,data,case.expected)) # 注册接口请求,获取响应
response = HttpRequest(method=case.method,url=url,data=data)
actual = response.get_json()['msg'] # 记录当前测试case 接口响应信息
get_log.log_info('''Test Case Request Response Result:
response : {0}
actual : {1}
'''.format(response.get_json(),actual)) # 接口请求实际结果与期望结果做校验
try:
self.assertEquals(case.expected,actual)
read_excel.write_result('register',case.case_id,actual,'Pass')
get_log.log_info('Test Result is Passed ! case_id is {0},title is {1} '.format(case.case_id,case.title))
except Exception as e:
read_excel.write_result('register',case.case_id,actual,'Fail')
get_log.log_info('Test Result is Failed ! case_id is {0},title is {1} '.format(case.case_id,case.title))
get_log.log_error('Error msg :{0}'.format(e))
raise e # 数据库校验
if actual == '注册成功' or actual == '手机号码已被注册':
sql_verify = 'SELECT MobilePhone FROM future.member WHERE MobilePhone = {0};'.format(data['mobilephone'])
sql_result = MysqlUtil().fetch_one(sql_verify)
if sql_result is not None:
self.assertEquals(str(data['mobilephone']),sql_result['MobilePhone'])
get_log.log_info('Test Result is Passed ! case_id is {0},title is {1} '.format(case.case_id,case.title))
else:
get_log.log_info('Test Result is Failed ! case_id is {0},title is {1} '.format(case.case_id,case.title))
get_log.log_error('Error msg :{0}'.format(AssertionError))
raise AssertionError
else:
sql_verify = 'SELECT MobilePhone FROM future.member WHERE MobilePhone = {0};'.format(data['mobilephone'])
sql_result = MysqlUtil().fetch_one(sql_verify)
print(sql_result)
try:
self.assertEquals(None,sql_result)
get_log.log_info('Test Result is Passed ! case_id is {0},title is {1} '.format(case.case_id,case.title))
except Exception as e:
get_log.log_info('Test Result is Failed ! case_id is {0},title is {1} '.format(case.case_id,case.title))
get_log.log_error('Error msg :{0}'.format(e))
raise e
python - 接口自动化测试 - TestRegister - 注册接口测试用例的更多相关文章
- 使用python进行接口自动化测试,批量执行测试用例
工作中,使用python的requests库进行接口自动化测试是一个比较不错的选择,今天就以某网站的免费接口为例,展示以get请求进行批量执行测试用例.话不多说直接开讲 分析一下接口信息, 请求地址: ...
- python - 接口自动化测试 - TestRecharge - 充值接口测试用例
# -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: test_recharge.py @ide: PyChar ...
- python - 接口自动化测试 - TestLogin - 登录接口测试用例
# -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: test_login.py @ide: PyCharm C ...
- python web自动化测试框架搭建(功能&接口)——测试用例执行和结果收集
由于unittest框架中结果收集在不同文件中,所以此处重写结果收集方法,加入执行时间,失败信息,失败截图等 TestRunner.py # coding=utf-8 import sys impor ...
- python web自动化测试框架搭建(功能&接口)——接口用例实现
测试用例基类: # coding=utf-8 import unittest import Logger log = Logger.Loger() class BaseCase(unittest.Te ...
- python web自动化测试框架搭建(功能&接口)——接口公共方法
接口公共方法有:数据引擎.http引擎.Excel引擎 1.数据引擎:获取用例.结果检查.结果统计 # -*- coding:utf-8 -*- from XlsEngine import XlsEn ...
- python web自动化测试框架搭建(功能&接口)——接口测试模块
Python接口测试采用python读取excel的方法,通过requests库发送请求和接收响应.模块有: Data:用于存放excel用例的,用例格式: iutil: 接口公共方法,数据引擎.ht ...
- python web自动化测试框架搭建(功能&接口)——功能测试模块
功能测试使用selenium,模块有: 1.futil: 公共方法,如元素高亮显示 # coding=utf-8 """高亮显示元素""" ...
- python web自动化测试框架搭建(功能&接口)——通用模块
1.通用模块: config.conf: 公共配置文件,配置报告.日志.截图路径,以及邮件相关配置 [report] reportpath = E:\workspace\WebAutomation\s ...
随机推荐
- python3爬虫03(find_all用法等)
#read1.html文件# <html><head><title>The Dormouse's story</title></head># ...
- hiho一下 第三十八周 二分答案
题目链接:http://hihocoder.com/contest/hiho38/problem/1 ,挺难想的解题思路,好题. 按照提示的算法来: 我们需要找什么? 在这个题目中我们需要找的是路径最 ...
- TFS看板规则
就绪板列 准入条件 需求已完成交付 需求交付过程中的问题已全部解决 当前迭代需求所产生的BUG必须放入该列 之前迭代遗留的BUG 工作内容 需求实现概要设计 BUG确认 任务拆分 任务工作量估算(单位 ...
- NOIP2018提高组Day1 解题报告
前言 关于\(NOIP2018\),详见此博客:NOIP2018学军中学游记(11.09~11.11). 这次\(NOIP\ Day1\)的题目听说很简单(毕竟是三道原题),然而我\(T3\)依然悲剧 ...
- CentOS 7 防火墙 出现Failed to start iptables.service: Unit iptables.service failed to load
错误信息如下: [root]# service iptables start Redirecting to /bin/systemctl start iptables.service Failed t ...
- 说说qwerty、dvorak、colemak三种键盘布局
[qwerty布局] qwerty布局大家应该都很熟悉了,全世界最普及的键盘布局. 截止到去年接触并使用dvorak布局之前,我使用了十几年qwerty布局,在http://speedtest.10f ...
- C#冒泡排序程序
考虑到很多面试可能会考察冒泡排序的用法,所以特地花时间厘清了一下思路.下面说一下我的思路:冒泡排序核心就是比较方法,冒泡排序的比较方法顾名思义就是像气泡一样,最大(或者最小)的数往上冒.普通比较几个数 ...
- oracle中常用的两个伪列
伪列 伪列就行oracle中的一个列表,但世界上它并未存储在表中,伪列可以被查询但是不能被插入或者更改. rowID 该伪列返回该行地址,可以使用rowID值来定位表中的一行.通常rowID值可以标识 ...
- node实现一个简单的聊天室(认识一下socket)
边学边理解node的高深,今天写了一个聊天室的demo,很简单,认识一下socket node服务端代码 var express = require('express'); var app = exp ...
- php 多维数组指定某个值作为键
$temp_key = array_column($mobile_arr,'cidf'); //键值 $mobile_arr = array_combine($temp_key,$mobile_arr ...