一、API 和 Web API
API(Application Programming Interface)应用程序编程接口重点是接口"I".
Web API是一个一URL 为控件的接口,对于非程序员来说,最常见和最容易访问的是REST和RESTful API。
普通的URL会返回在浏览器中设计精美的页面和内容,而Web API URL会返回一些纯粹的基础信息,没有装饰的纯文本块。
Web API是专为电脑阅读而设计的,是一种去除所有你不关心的外部可视化界面并获取数据的方法。
二、API的调用和使用
以聚合数据网站为例——
国内聚合网站查找手机归属地查询API
产品功
根据手机号或手机号前7位,查询手机号码归属地信息(省份、城市、运营商 )
聚合网站,API每日免费调用100次
API文档(手机归属地查询API)
三、python自动化接口测试
需求分析:手机归属地查询
用例设计
测试程序
执行程序
提交测试结果
- 对资源请求数据函数和测试用例TestCase进行封装;
- 将测试用例依次写入测试套件TestSuite;
- 通过TextTestRunner的run执行测试操作并返回测试结果
资源请求和测试用例封装
import requests
import unittest
class Test_Mobile(unittest.TestCase):
def request_data(self,phone): # 封装资源请求方式
url = 'http://apis.juhe.cn/mobile/get'
data = {
'key':"4391b7dd8213662798c3ac3da9f54ca8", # 必填 int型
'phone': phone, # 必填 string型
# 'dtype':"xml" # 非必填 string型, 返回数据的格式,xml或json,默认json
}
self.res = requests.get(url, params=data)
if self.res.status_code ==200:
return self.res
else:
print('Request API Error!')
def test_1(self): ###测试案例1
self.request_data('1882203')
print('\n',self.res.text) # {"resultcode":"200","reason":"Return Successd!","result":{"province":"天津","city":"天津","areacode":"022","zip":"300000","company":"移动","card":""},"error_code":0}
print(self.res.json()) # {'resultcode': '200', 'reason': 'Return Successd!', 'result': {'province': '天津', 'city': '天津', 'areacode': '022', 'zip': '300000', 'company': '移动', 'card': ''}, 'error_code': 0}
print(type(self.res.json())) # <class 'dict'>
res_dict1 = self.res.json()
# 自动化 结果校验 加入断言进行判断并返回结果
province = res_dict1['result']['province']
self.assertEqual(province,'天津',msg='%s != %s'%(province,'天津'))
def test_2(self): ###测试案例2
self.request_data('1586128')
print('\n',self.res.json())
res_dict2 = self.res.json()
# 自动化 结果校验 加入断言进行判断并返回结果
resultcode = res_dict2['resultcode']
self.assertEqual(resultcode,'201',msg='%s != %s'%(resultcode,'201'))
if __name__ == '__main__':
unittest.main()
一个个加载测试案例的代码
import unittest
from TestCase_Demo import Test_Mobile
import HTMLTestRunner
testsuite = unittest.TestSuite()
# 一个一个加载测试用例
testsuite.addTest(Test_Mobile('test_1'))
testsuite.addTest(Test_Mobile('test_2'))
with open('Unittest_Requests_test\\result1.txt','a') as f:
runner = unittest.TextTestRunner(stream = f, verbosity=2)
runner.run(testsuite)
或者 一次加载全部测试用例
import unittest
from TestCase_Demo import Test_Mobile
import HTMLTestRunner
testsuite = unittest.TestSuite()
# 一次加载全部测试用例
testload = unittest.TestLoader()
case = testload.loadTestsFromTestCase(Test_Mobile)
testsuite.addTest(case)
with open('Unittest_Requests_test\\result2.html','wb') as f:
runner = HTMLTestRunner.HTMLTestRunner(stream = f,
title = "手机归属地查询自动化接口测试报告",
description='用例执行结果')
runner.run(testsuite)
此处python3 + pycharm中使用 HTMLTestRunner 出现问题,需要在sitepackages的Lib中添加HTMLTestRunner.py文件和对内部程序作部分修改
邮件发送测试执行结果
import smtplib
from email.mime.text import MIMEText
from email.header import Header
server_host = 'smtp.qq.com'
port = 25
username =input('请输入发送人邮箱:') #
password = input('邮箱授权码:') #
from_addr = username
to_addr = input('请输入收件人邮箱:')
subject = '手机归属地查询自动化接口测试结果报告'
with open('Unittest_Requests_test\\result2.html','r',encoding='utf-8') as f:
content = f.read()
msg = MIMEText(content,'html') ## 此处读取的是html
msg['Subject'] = Header(subject)
msg['From'] = Header(from_addr)
msg['To'] = Header(to_addr)
smtp = smtplib.SMTP(server_host) # 实例化
smtp.connect(server_host,port) # 指定连接的服务器地址和端口
smtp.login(username,password) # 登陆
try:
smtp.sendmail(from_addr,to_addr,msg.as_string())
print('Success!')
except:
print('Fail!')
邮箱收到的测试结果是——