题目:
1、打开postman输入网址及查询手机号,选择json格式,出现下图结果
2、创建文件夹,并用pycharm打开
3、创建如图所示目录
4、在api文件下封装被测系统--手机号测试接口,这里取名phone_api,
存放代码:
class PhoneApi(object):
def __init__(self):
self.phone_url = "http://cx.shouji.360.cn/phonearea.php"
def get_phone_info(self,session,params):
return session.get(url=self.phone_url,params=params)
5、在script文件下定义测试脚本,这里取名为PhoneTest
存放代码:
# 导入unittest框架的测试类
import unittest
# 导入requests模块自动封装cookie的Session类
from requests import Session
# 导入api文件下的PhoneApi
from api.phone_api import PhoneApi
class PhoneTest(unittest.TestCase):
# 一个测试用例里不可能只有一个测试类,
# 所以要在所有的类开始之前定义一个类级别
@classmethod
# 数据化执行开始 setUpClass类方法前置条件,
# 运行用例前只会执行一次里面的方法 使用必须加装饰器
# setUpClass(cls) 与 tearDownClass(cls) 并不一定要组合使用,它们是同级关系不是上下级关系,可以单独拆分使用。
def setUpClass(cls) -> None:
cls.phone_api = PhoneApi()
# 数据化执行开始 setUp普通方法前置条件,
# 每运行一次用例,都会执行一次里面的方法 使用不用加装饰器
def setUp(self) -> None:
self.session = Session()
# 数据化执行结束 setUp普通方法后置条件,
# 每运行一次用例,都会执行一次里面的方法 使用不用加装饰器
def tearDown(self) -> None:
self.session.close()
# 编写测试用例
def test_01(self):
params = {
"number":"13466920626"
}
res = self.phone_api.get_phone_info(self.session,params=params)
res = res.json()
# 断言
self.assertEqual("北京",res["data"]["city"],msg="%s归属地不是北京" % params["number"])
6、编写执行测试套件入口run_suite
将测试报告模板文件复制到lib文件夹下
import unittest
from lib.HTMLTestRunner import HTMLTestRunner
from script.PhoneTest import PhoneTest
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(PhoneTest))
f = open('D:/p6课堂练习/phone/lib/report/report.html','wb')
runner = HTMLTestRunner(stream=f,title="手机号归属地查询",description="查询结果")
runner.run(suite)
7、运行结果
8、返回测试脚本PhoneTest,继续编写用例2
import requests
def test_02(self):
params = {
"number":"13466920626"
}
res = self.phone_api.get_phone_info(self.session,params=params)
res = res.json()
yys = res['data']['sp']
bd_url = "http://www.baidu.com/s"
p = {'wd':yys}
ret = requests.get(url=bd_url,params=p)
ret.encoding = 'utf-8'
with open('D:/p6课堂练习/phone/lib/report/baidu.html','w',encoding='utf-8') as f:
f.write(ret.text)
9、再次运行run_suite
10、缺陷报告



