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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 本篇还是回归到我们最初始的话题,想必大家都忘记了,没关系看这里:传送门 没错最初的话题就是登录,由于博客园的登录机制改变了,本篇以我找到的开源免费的登录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这样也可以被捕获到。



相关文章
|
10天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
45 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
5天前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
24 2
|
7天前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
20 3
|
6天前
|
数据采集 IDE 测试技术
Python实现自动化办公:从基础到实践###
【10月更文挑战第21天】 本文将探讨如何利用Python编程语言实现自动化办公,从基础概念到实际操作,涵盖常用库、脚本编写技巧及实战案例。通过本文,读者将掌握使用Python提升工作效率的方法,减少重复性劳动,提高工作质量。 ###
20 1
|
13天前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。
|
14天前
|
数据采集 Web App开发 JavaScript
爬虫策略规避:Python爬虫的浏览器自动化
爬虫策略规避:Python爬虫的浏览器自动化
|
11天前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
3月前
|
测试技术 Python
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
本文介绍了Python中的循环语句,包括while和for循环的使用,range()函数的运用,以及continue、break和pass关键字的说明,同时提出了关于while循环是否能与成员运算符结合使用的思考。
50 1
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
|
3月前
|
测试技术 索引 Python
Python接口自动化测试框架(练习篇)-- 数据类型及控制流程(一)
本文提供了Python接口自动化测试中的编程练习,包括计算器、猜数字、猜拳和九九乘法表等经典问题,涵盖了数据类型、运算、循环、条件控制等基础知识的综合应用。
47 1
|
3月前
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
本文介绍了Python中的文件操作方法,包括使用open()打开文件、close()关闭文件、read()读取内容、readline()读取单行、readlines()读取多行、write()写入内容以及writelines()写入多行的方法。同时,探讨了文件操作模式和编码问题,并扩展了上下文管理器with...as的使用,以及对图片和音频文件操作的思考和练习。
31 1
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作