接口自动化测试总结,接口鉴权+加密与解密+数据库操作/断言...

1123 篇文章 44 订阅
830 篇文章 2 订阅

前言

1、接口鉴权的多种方式

1)后端接口鉴权常用方法

cookie: 携带身份信息请求认证 之后的每次请求都携带cookie信息,cookie记录在请求头中

token: 携带身份信息请求认证 之后的每次请求都携带token认证信息 可能记录在请求头,可能记录在url参数中

auth: 每次请求携带用户的username和password,并对其信息加密

oauth2(选修): 携带身份信息请求认证 服务端向指定回调地址回传code 通过code获取token 之后的请求信息都携带token。

2)cookie 鉴权

cookie 的获取(根据接口文档获取)

发送携带 cookie 的请求 直接通过 cookies 参数 通过 Session() 对象

class TestWithSession:
    proxy = {"http": "http://127.0.0.1:8888", "https": "https://127.0.0.1:8888"}
    req = requests.Session()

    def setup_class(self):
        url = "http://train-manage.atstudy.com/login"
        data = {"username": "199****9999", "password": "a1***56"}
        resp = self.req.request("post", url, data=data, proxies=self.proxy)
        print(self.req.headers)

    def test_get_userinfo(self):
        url = "http://train-manage.atstudy.com/api/manage/User/Info"
        resp = self.req.request("get", url, proxies=self.proxy)
        print(resp.text)

    def test_manage_tag(self):
        url = "http://train-manage.atstudy.com/api/manage/Tag?type=1"
        resp = self.req.request("get", url, proxies=self.proxy)
        print(resp.text)

3)token 鉴权

token 的获取(根据接口文档获取) 发送携带 token 的请求(根据接口文档获取)

class TestWithToken:
    proxy = {"http": "http://127.0.0.1:8888", "https": "http://127.0.0.1:8888"}
    headers = {}

    def setup_class(self):
        token = self.login().json()["data"]["token"]
        print(token)
        self.headers["x-litemall-admin-token"] = token

    @classmethod
    def login(cls):
        url = "https://litemall.hogwarts.ceshiren.com/admin/auth/login"
        data = {"username": "hogwarts", "password": "test12345", "code": ""}
        resp = requests.request("post", url, json=data, proxies=cls.proxy, verify=False)
        return resp

    def test_get_dashboard(self):
        url = "https://litemall.hogwarts.ceshiren.com/admin/dashboard"
        resp = requests.request("get", url, headers=self.headers, proxies=self.proxy, verify=False)
        print(resp.text)
        # print(1)

    def test_category_list(self):
        url = "https://litemall.hogwarts.ceshiren.com/admin/category/list"
        resp = requests.request("get", url, headers=self.headers, proxies=self.proxy, verify=False)
        print(resp.text)
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:310357728【暗号:csdn999】

2、加密与解密

1)原理

在得到响应后对响应做解密处理:

如果知道使用的是哪个通用加密算法的话,可以自行解决。 如果不了解对应的加密算法的话,可以让研发提供加解密的lib。

如果既不是通用加密算法、研发也无法提供加解密的lib的话,可以让加密方提供远程解析服务,这样算法仍然是保密的。

2)实战练习

调用python自带的base64,直接对返回的响应做解密,即可得到解密后的响应。 封装对于不同算法的处理方法。

class TestEncode:
    def test_decode(self):
        url = "http://127.0.0.1:9999/demo.txt"
        res = requests.request("get",url)
        print(res.content)
        de_res = base64.b64decode(res.content)
        print(json.loads(de_res))

3、数据库操作与断言

1)接口测试响应验证

如何在测试过程中验证接口没有 Bug?

通过接口响应值; 通过查询数据库信息辅助验证;

2)接口测试数据清理

自动化测试中会产生大量的脏数据,该如何清理?

通过调用delete接口删除 自动化测试使用干净的测试环境,每次自动化测试完成后,还原数据。

3)数据库操作注意事项

直接对数据库操作是非常危险的行为 权限管理严格的公司对数据库权限给的很低 表结构复杂,随便删除数据会影响功能异常,甚至会出现系统异常。

4)接口自动化测试常用的数据库操作

连接与配置 查询数据与断言

数据库封装(Python):

封装数据库配置 封装 sql 查询操作 调用方法执行 sql 语句

class Mysql:
    @classmethod
    def connect(cls):
        mysql_info = {
            "host": "litemall.hogwarts.ceshiren.com",
            "port": 13306,
            "user": "test",
            "password": "test123456",
            "database": "litemall",
            "charset": "utf8mb4"
        }
        conn = pymysql.Connect(**mysql_info)
        return conn

    @classmethod
    def execute(cls, sql):
        cnn = cls.connect()
        sor = cnn.cursor()
        sor.execute(sql)
        res = sor.fetchall()
        sor.close()
        cnn.close()
        return res

数据库断言

def test_cart_add(self, good_sn='CC102101'):
        """测试添加购物车功能"""
        with allure.step("获取商品的id"):
            ids = self.good.id(good_sn)
        with allure.step("获取商品的good_id和product_id"):
            good_id = ids[0]
            product_id = ids[1]
        sql = f"""                 
        SELECT number FROM litemall_cart where goods_sn='{good_sn}' and goods_id='{good_id}'
        """
        good_num1 = Mysql.execute(sql)[0][0]
        print(good_num1)
        with allure.step("添加商品到购物车"):
            print(self.cart.add(good_id, product_id))
        good_num2 = Mysql.execute(sql)[0][0]
        print(good_num2)
        assert good_num2 - good_num1 == 1

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot + Atomikos环境下,我们可以使用Jasypt库来实现数据库信息的加密解密。以下是一个示例: 1. 首先,在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency> ``` 2. 在application.properties或application.yml文件中,我们需要设置以下属性: ```properties jasypt.encryptor.password=yourSecretPassword ``` 这里的“yourSecretPassword”是一个自定义的密码,用于加密解密数据。 3. 在applicationContext.xml文件中,我们可以使用Jasypt提供的加密解密Bean来加密解密数据库信息。以下是一个示例: ```xml <bean id="propertyConfigurer" class="com.ulisesbocchio.jasyptspringboot.properties.JasyptEncryptablePropertyPlaceholderConfigurer"> <constructor-arg ref="encryptor" /> <property name="locations"> <list> <value>classpath:application.properties</value> </list> </property> </bean> <bean id="encryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> <property name="password"> <value>${jasypt.encryptor.password}</value> </property> </bean> <bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"> <property name="uniqueResourceName"> <value>dataSource</value> </property> <property name="xaDataSourceClassName"> <value>com.mysql.cj.jdbc.MysqlXADataSource</value> </property> <property name="xaProperties"> <props> <prop key="URL">${encryptor.decrypt('encrypted.database.url')}</prop> <prop key="user">${encryptor.decrypt('encrypted.database.username')}</prop> <prop key="password">${encryptor.decrypt('encrypted.database.password')}</prop> </props> </property> <property name="poolSize" value="5" /> </bean> ``` 在这个示例中,我们使用了JasyptEncryptablePropertyPlaceholderConfigurer作为属性配置器,并将其构造函数的参数设置为encryptor Bean。我们还使用了StandardPBEStringEncryptor来创建encryptor Bean,并将其密码设置为前面在application.properties文件中设置的密码。 在dataSource Bean中,我们使用了encryptor.decrypt()方法来解密数据库URL、用户名和密码。这样,我们就可以安全地存储数据库信息,而不必担心它们被第三方获取到。 需要注意的是,加密解密的过程是在Spring应用程序的启动过程中完成的。因此,如果我们在应用程序运行时更改了加密密码,那么我们需要重新启动应用程序才能使新密码生效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值