python接口自动化(二十五)--unittest断言——下(详解)

简介: 本篇还是回归到我们最初始的话题,想必大家都忘记了,没关系看这里:传送门 没错最初的话题就是登录,由于博客园的登录机制改变了,本篇以我找到的开源免费的登录API为案例,结合 unittest 框架写 2 个用例。同样我们先来看一下接口文档。

简介


  

本篇还是回归到我们最初始的话题,想必大家都忘记了,没关系看这里:传送门  没错最初的话题就是登录,由于博客园的登录机制改变了,本篇以我找到的开源免费的登录API为案例,结合 unittest 框架写 2 个用例。同样我们先来看一下接口文档。


接口文档


登录接口


请求方式:POST

请求地址:https://api.apiopen.top/developerLogin


Query参数名 类型 必需 描述 示例 e.g.
name string 用户名 peakchao
passwd string 密码 123456


返回示例:


{
    "code": 200,
    "message": "成功!",
    "result": {
        "apikey": "b9b3a96f7554e3bead2eccf16506c13e"
    }
}

 

设计测试用例


1、针对以上接口文档,设计这个登录接口的测试用例


1232840-20190428084340657-2049868223.png


2、参考代码


 # coding=utf-8
  #1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  #2.注释:包括记录创建时间,创建人,项目名称。
  '''
  Created on 2019-4-28
  @author: 北京-宏哥
  Project:学习和使用unittest框架设计登录测试用例和断言-下篇
  '''
 #3.导入requests和unittest模块
 import requests
 import unittest
 #4.编写测试用例和断言
 class Blog_login(unittest.TestCase):
     def login(self, username, psw):
         '''两个个参数:账号:username,密码:psw'''
         url = "https://api.apiopen.top/developerLogin"
         par = {"name": username,
                "passwd": psw
         }
         res = requests.post(url, params=par)
 #        result1 = res.text  # 字节输出
 #        print(result1)
         return res.json()
     def test_login1(self):
         '''测试登录:正确账号,正确密码'''
         username = "peakchao",  # 正确账号,抓包获得的加密字符串
         psw = "123456",  # 正确密码,抓包获得的加密字符串
        result = self.login(username, psw)
         self.assertEqual(200,result['code'])
         print(result['message'])
     def test_login2(self):
         '''测试登录:正确账号,错误密码;反之也可以设计用例'''
         username = "peakchao",#正确账号
         psw = "122222",#错误密码
         result = self.login(username, psw)
         self.assertEqual(result['code'], 400)
         print(result['message'])
     def test_login3(self):
         '''测试登录:账号为空,正确密码;反之也可以设计用例'''
         username = "",  # 错误账号
         psw = "123456",  # 正确密码
         result = self.login(username, psw)
         self.assertEqual(result['code'], 400)
         print(result['message'])
 if __name__ == "__main__":
  unittest.main()


无接口文档


1、在实际工作中由于某些原因开发人员不能按时给出接口文档,但是接口已经开发好了,需要测试人员提前介入,此时你又不能等接口文档写好了再开始测试,那样黄花菜都凉了,还有就是接口文档有是有,但是没有人更新和维护,如果你按

照旧文档保证是会出错,或者接口不通。所以我们必须采用另一种方式开始测试接口。


2、那就是我们自己通过fiddler抓包获取url和接口的参数以及返回结果等等,还是由于博客园的登录机制的改变,我在这了一jenkins登录接口为例给小伙伴们演示一下。


3、大致流程:web页面jenkins点击登录—>fiddler抓包获取登录接口URL和参数—>从fiddler查看登录接口返回的结果—>代码模拟登录接口并获取接口登录返回结果—>设计登录接口测试用例—>断言并执行用例


4、web页面jenkins点击登录


1232840-20190428093018035-710689636.png


5、fiddler抓包获取登录接口URL和参数


1232840-20190428093253185-1945823672.png


6、从fiddler查看登录接口返回的结果


1232840-20190428093340762-1848257507.png


7、代码模拟登录接口并获取接口登录返回结果

1232840-20190428101738005-1279406397.png


8、设计登录接口测试用例

1232840-20190428101806892-1174445873.png


9、断言并执行用例

1232840-20190428101840995-1238924574.png


10、参考代码


 # coding=utf-8
  #1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  #2.注释:包括记录创建时间,创建人,项目名称。
  '''
 Created on 2019-4-28
  @author: 北京-宏哥
  Project:学习和使用unittest框架设计jenkins登录测试用例和断言-下篇
  '''
 #3.导入requests和unittest模块
import requests
 import unittest
 #4.编写测试用例和断言
 class Jenkins_login(unittest.TestCase):
     def login(self, username, psw):
         '''从fiddler抓包看到事个参数:
         账号:j_username,密码:j_password,from,Submit,remember_me
         '''
         url = "http://localhost.:8080/jenkins/j_acegi_security_check"
         headers = {
             "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
         }  # get方法其它加个ser-Agent就可以了
         par = {"j_username": username,
              "j_password": psw,
              "from": "",
              "Submit": u"登录",
              "remember_me": "on"
         }
         res = requests.post(url, headers=headers, data=par)
         result = res.url  # 字节输出
         print(result)
         result1 = res.status_code
         print(result1)
         return res.status_code
     def test_login1(self):
         '''测试登录:正确账号,正确密码'''
         username = "admin",  # 正确账号,抓包获得的加密字符串
         psw = "111111",  # 正确密码,抓包获得的加密字符串
         result = self.login(username, psw)
         self.assertEqual(200,result)
     def test_login2(self):
         '''测试登录:正确账号,错误密码;反之也可以设计用例'''
         username = "admin",#正确账号
         psw = "122222",#错误密码
         result = self.login(username, psw)
         self.assertEqual(result, 404)
     def test_login3(self):
         '''测试登录:账号为空,正确密码;反之也可以设计用例'''
         username = "",  # 错误账号
         psw = "111111",  # 正确密码
         result = self.login(username, psw)
         self.assertEqual(result, 404)
 if __name__ == "__main__":
  unittest.main()


小结



1、fiddler抓取本地部署的jenkins登录请求时,抓取不到,但是百度可以抓取到,解决方法:


(1)使用http://localhost.fiddler 代替http://localhost

(2)使用用 http://localhost. 在locahost后面加一个点号

(3)使用 http://127.0.0.1.  在127.0.0.1后面加一个点号

(4)使用 http://machinename  使用机器名

(5)打开Fiddler,菜单>Fiddler Options>General>Enable IPv6(if avaible)去掉该选项。

(6)在hosts文件中加入127.0.0.1  localsite这样也可以被捕获到。



相关文章
|
1天前
|
JSON 监控 调度
局域网管理软件的自动化任务调度:Python 中的 APScheduler 库的应用
使用 Python 的 APScheduler 库可简化局域网管理中的自动化任务调度。APScheduler 是一个轻量级定时任务调度库,支持多种触发方式如间隔、时间、日期和 Cron 表达式。示例代码展示了如何创建每 10 秒执行一次的定时任务。在局域网管理场景中,可以利用 APScheduler 定期监控设备状态,当设备离线时自动提交数据到网站,提升管理效率。
11 0
|
5天前
|
监控 PHP Python
1688快速获取整店铺列表 采集接口php Python
在电子商务的浪潮中,1688平台作为中国领先的批发交易平台,为广大商家提供了一个展示和销售商品的广阔舞台;然而,要在众多店铺中脱颖而出,快速获取商品列表并进行有效营销是关键。
|
5天前
|
存储 安全 数据库
自动化密码填充:使用Python提高日常工作效率
自动化密码填充:使用Python提高日常工作效率
11 0
|
5天前
|
SQL 数据库 数据库管理
python自动生成SQL语句自动化
python自动生成SQL语句自动化
23 1
|
6天前
|
持续交付 Python
使用Python实现自动化Web内容巡检
使用Python实现自动化Web内容巡检
17 1
|
9天前
|
监控 测试技术 持续交付
Python自动化测试代理程序可用性
总之,通过编写测试用例、自动化测试和设置监控系统,您可以确保Python自动化测试代理程序的可用性,并及时发现和解决问题。这有助于提供更可靠和高性能的代理服务。
14 4
|
12天前
|
机器学习/深度学习 数据采集 算法
【Python机器学习专栏】自动化特征选择与优化的实践
【4月更文挑战第30天】特征选择在机器学习中至关重要,能降低模型复杂度,提高泛化能力和避免过拟合。本文介绍了自动化特征选择的三种方法:过滤法(如SelectKBest)、包装法(如RFE)和嵌入法(如随机森林)。通过结合这些方法,可实现特征优化,包括数据预处理、初步筛选、模型训练与评估、特征优化和结果验证。自动化特征选择能提升模型性能,适应不同数据集和任务需求,为机器学习项目提供坚实基础。
|
15天前
|
IDE 测试技术 持续交付
【专栏】利用Python自动化测试与单元测试框架提升代码质量与效率
【4月更文挑战第27天】本文探讨了Python自动化测试与单元测试框架在提升代码质量与效率中的作用。Selenium、Appium用于Web和移动应用自动化测试,pytest提供强大、易扩展的测试支持。unittest是Python标准的单元测试框架,支持结构化测试用例和丰富的断言。实践中,应制定测试计划,编写高质量测试用例,实行持续集成与测试,并充分利用测试报告。这些工具和策略能有效保障代码质量和提升开发效率。
|
缓存 Python 数据安全/隐私保护

热门文章

最新文章