【学习笔记】Python实现接口自动化的学习笔记(自用)

pytest框架笔记

说明,只是在b站看了学习视频,参考:Python接口自动化测试零基础入门到精通,记录的一些笔记

  1. python已提供requests库,支持http协议不同类型的接口(session.request),并封装统一的类供调用
  2. 使用不同的库,可以ctrl并点击对应方法,跳转到库内的原始函数查看相关信息
  3. 自动导包快捷键:Alt + Enter
  4. 新增requirements.txt文件,执行pip install -r requirements.txt安装插件
  5. pytest框架,执行方式
    1. 命令行,直接输入pytest并回车
      1. pytest -v 输出更详细的信息 
      2. pytest -s 输出调试信息
    2. 主函数,新建run.py文件
    3. 新建pytest.ini文件
  6. fixtures固件可以放在测试文件里也可以单独放一个文件
  7. 前置,分层级执行
  8. 通过中间文件存并读取数据​​​​且在请求之前清空数据,效果是中间文件显示的为最新的值,方便排查读取yaml文件的完整py文件具体引用提醒,是用字典,用:不是,yaml文件内容格式是aa:xx,bb:xxxx,所以取aa,用的是冒号
  9. 数据驱动,先把数据录入到yaml文件尝试读取yaml文件具体使用,方法前添加@pytest.mark.parametrize()
  10. 用yaml实现数据驱动后,怎么把中间文件的变量赋值
  11. 用yaml实现数据驱动后,怎么执行读取文件操作
  12. Cookie鉴权:当客户端第一次访问服务器时会产生cookie,客户端从第二次请求起(2-N次)会自动带上这些cookie,在实现自动化时,需要手工处理,让第二个发起的请求带上cookie
    class Cookie_test(unittest.TestCase):
        csrf_token = ""
        csrf_cookie = ""
        
      def test_01_get_cookie(self):
        url ='http://www.baidu.com/xxxxx'
        res = requests.get(url = url)
        # 通过正则表达式取得csrf_token
        value = re.search('name="csrf_token" value="(.+?)"',res.text)
        # csrf_token设置为全局变量,供其它方法使用cookie
        Cookie_test.csrf_token = value.group(1)
        # 获取cookie并设置为全局变量
        Cookie_text.csrf_cookie = res.cookies
    
      def test_02_login(self):
        url = "http://www.baidu.com/xxxxx"
        data = {
            "username":"admin",
            "password":"password",
            "csrf_token":Cookie_test.csrf_token
        }
        headers = {
            "Accept":"aplication/json, text/javascript",
        }
        # 后续发起的请求,需要带上cookie信息
        res = requests.post(url, data=data, headers=headers, cookies = Cookie_text.csrf_cookie)
        print(res.text)

    弊端:cookie保存在客户端是不安全的,容易泄露信息(用户名、密码等)

  13. session鉴权:用户第一次访问服务器时,会在服务器端保存sessionid(经过加密),通过cookie把sessionid保存到客户端,然后请求服务器时只发送sessionid。在自动化实现时,理解为是同一个用户在发送请求
    class Cookie_test(unittest.TestCase):
        csrf_token = ""
        session = requests.seesion()
        
      def test_01_get_cookie(self):
        url ='http://www.baidu.com/xxxxx'
        res = Cookie_test.session.get(url = url)
        # 通过正则表达式取得csrf_token
        value = re.search('name="csrf_token" value="(.+?)"',res.text)
        # csrf_token设置为全局变量,供其它方法使用cookie
        Cookie_test.csrf_token = value.group(1)
    
      def test_02_login(self):
        url = "http://www.baidu.com/xxxxx"
        data = {
            "username":"admin",
            "password":"password",
            "csrf_token":Cookie_test.csrf_token
        }
        headers = {
            "Accept":"aplication/json, text/javascript",
        }
        # 使用session调用
        res = Cookie_test.session.post(url, data=data, headers=headers)
        print(res.text)

    弊端:由于sessionid保存在服务器端,并发多的时候容易造成服务器崩溃

接口自动化中实现接口关联的三种方法 

  • 接口自动化怎实现接口关联的三种方法
  1. 通过类变量保存
  2. 通过文件保存
  3. 封装成方法
  • 接口自动化中,提取变量的两种方式  

1、正则表达式:

 参考代码:

class Cookie_test(unittest.TestCase):
    csrf_token = ""
    csrf_cookie = ""
    
  def test_01_get_cookie(self):
    # 第一个接口获取值,并设置为全局变量
    url ='http://www.baidu.com/xxxxx'
    res = requests.get(url = url)
    #print(res.text)
    # 通过正则表达式取得csrf_token
    value = re.search('name="csrf_token" value="(.+?)"',res.text)
    # 打印出一个re.Merch 对象值
    print(value)
    # 打印csrf_token
    #print(value.group(1))
    # csrf_token设置为全局变量,供其它方法使用cookie
    Cookie_test.csrf_token = value.group(1)

  def test_02_login(self):
    url = "http://www.baidu.com/xxxxx"
    data = {
        "username":"admin",
        "password":"password",
        # 依赖第一个接口的值,引用全局变量
        "csrf_token":Cookie_test.csrf_token
    }
    headers = {
        "Accept":"aplication/json, text/javascript",
    }
    res = requests.post(url, data=data, headers=headers)
    print(res.text)
    

print(value)的结果,是个re.Match对象

print(value.group(1))的结果,通过下标取预期的值

2、Jsonpath提取:返回的是一个列表

unittest框架笔记

单元测试框架对比

基于Python:unittest、pytest(python的第三方测试框架,需另外下载)

基于Java:junit、testing

编写规则

unittest:提供testcases(测试用例)、testsuites(测试套件——

(1)测试文件必须先导入unittest:import unittest

(2)测试类必须继承unittest.TestCase

(3)测试方法必须以test开头

pytest:python的第三方测试框架。基于unittest的扩展框架,必须遵守以下规则:

(1)测试文件名必须以test_开头或者_test结尾

(2)测试类命名必须以Test开头

(3)测试方法必须test开头

用例的前后置

unittest

setUp/tearDown在每个用例之前/之后执行一次常用于:打开浏览器,加载或关闭网页
setUpClass/tearDownClass在每个类之前/之后运行一次常用于:创建/关闭数据库链接,创建/关闭日志对象
setUpModule/tearDownModule在每个模块之前/之后执行一次

pytest

方法类:参考代码位置,在类里面

class test():
    def setup_mothod(self):
        // 在方法之前使用
        pass
    
    def test_function(self):
        // 类里面是方法
        pass

    def tear_mothod(self):
        // 在方法之后使用
        pass

函数类:参考代码位置,在类外面

def setup_function(self):
    // 在函数之前使用
    pass

def fun_sum(self):
    //类外面是函数
    pass

def setup_function(self):
    // 在函数之后使用
    pass

class test():
    def hello(self):
        pass
方法级setup_mothod/teardown_mothod在方法之前/之后
setup/teardown
函数级setup_function/teardown_function在函数之前/之后
类级setup_class/teardown_class
模块级setup_module/teardown_module

断言

unitest: assertTure/assertEqual/assertIn

pytest: assert

报告

unittest: htmltestrunner

pytest: 插件: pytest-HTML, allure

失败重跑

unittest: 没有

pytest: pytest-rerunfailures插件

数据驱动

unittest: ddt

pytest: @pytest.mark.parametrize装饰器

用例分类执行

unittest: 默认执行所有,也可以通过testsuite来执行部分用例,或者-k参数

pytest: @pytest.mark

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值