Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 玩物志趣 › 「技术教程」使用Playwright进行API接口测试

「技术教程」使用Playwright进行API接口测试

Eswlnk的头像
Eswlnk
2024-08-05 22:44:23
「技术教程」使用Playwright进行API接口测试-Eswlnk Blog
智能摘要 AI
Playwright 支持 API 测试,虽然不如 requests 库强大,但比 Selenium 更方便,支持直接调用接口。本文介绍了如何用 Playwright 进行 API 测试,包括实例化 request 对象、GET、POST、PUT、DELETE 请求及文件上传的示例代码。虽然官方文件上传方法存在问题,但通过模拟构造入参解决了问题。总体而言,Playwright 在功能上略胜 Selenium。

Playwright也能用来做接口测试,但个人感觉还是没有requests库那么强大。不过比起selenium,它还是强一点,毕竟支持API登录,可以不用交互直接调用接口操作了。

怎么用

既然是API测试,就别搞UI自动化那套了,搞什么浏览器交互,根本不是API测试,纯粹是瞎扯。

不像有些博主懒,直接贴官方例子,难道我要你再复制一遍给我看?

下面,我来说明一下如何用playwright做API测试。

实例化request对象

代码如下:

playwright.request.new_context()

没错,实例化后就是调API,其实也不是很难吧?

实战举例

这里用我自己写的学生管理系统的部分接口做演示,并对常用API做说明,示例代码都是同步写法。

1. GET请求

示例如下:

def testQueryStudent(playwright: Playwright):
    """
    查询学生
    """
    url = 'http://localhost:8090/studentFindById'
    param = {
        'id': 105
    }
    request_context = playwright.request.new_context()
    response = request_context.get(url=url, params=param)
    assert response.ok
    assert response.json()
    print('\n', response.json())

效果:

「技术教程」使用Playwright进行API接口测试-Eswlnk Blog

2. POST请求

示例代码:

def testAddStudent(playwright: Playwright):
    """
    新增学生
    """
    url = 'http://localhost:8090/studentAdd'
    request_body = {
        "className": "banji",
        "courseName": "wuli",
        "email": "ales@qq.com",
        "name": "ales",
        "score": 70,
        "sex": "boy",
        "studentId": "92908290"
    }
    header = {"Content-Type": "application/json"}
    request_context = playwright.request.new_context()
    response = request_context.post(url=url, headers=header, data=request_body)
    assert response.ok
    assert response.json()
    print('\n', response.json())

效果:

「技术教程」使用Playwright进行API接口测试-Eswlnk Blog

3. PUT请求

示例代码:

def testUpdateStudents(playwright: Playwright):
    """
    修改学生
    """
    url = 'http://localhost:8090/studentUpdate/100'
    param = {
        'studentId': "id" + str(100),
        'name': "name" + str(100),
        'score': 100,
        "sex": "girl",
        "className": "class" + str(100),
        "courseName": "course" + str(100),
        "email": str(100) + "email@qq.com"
    }
    request_context = playwright.request.new_context()
    response = request_context.put(url=url, form=param)
    assert response.ok
    assert response.json()
    print('\n', response.json())

效果:

「技术教程」使用Playwright进行API接口测试-Eswlnk Blog

4. DELETE请求

示例代码:

def testDeleteStudents(playwright: Playwright):
    """
    删除学生
    """
    url = 'http://localhost:8090/studentDelete/' + str(105)
    request_context = playwright.request.new_context()
    response = request_context.delete(url=url)
    assert response.ok
    assert response.json()
    print('\n', response.json())

效果:

「技术教程」使用Playwright进行API接口测试-Eswlnk Blog

5. 上传文件

这是个特例吧,按照官方方法,我真的搞不定,总是提示上传文件不能为空。结果用了一个替代方案,抓包模拟构造入参才成功,真是曲折。

示例代码:

def test_upload_file(playwright: Playwright):
    '''
    上传文件
    '''
    request_context = playwright.request.new_context()
    upload_url = "http://localhost:8090/fileUpload"
    file_path = "d:/demo.txt"
    filename = file_path.split('/')[-1]
    mime_type, _ = mimetypes.guess_type(file_path)
    if not mime_type:
        mime_type = 'application/octet-stream'

    with open(file_path, 'rb') as file:
        file_content = file.read()

    boundary = '---------------------' + str(random.randint(1e28, 1e29 - 1))

    body = (
        f'--{boundary}\r\n'
        f'Content-Disposition: form-data; name="file"; filename="{filename}"\r\n'
        f'Content-Type: {mime_type}\r\n\r\n'
        f'{file_content.decode("utf-8") if mime_type.startswith("text/") else file_content.hex()}'
        f'\r\n--{boundary}--\r\n'
    ).encode('utf-8')

    headers = {
        'Content-Type': f'multipart/form-data; boundary={boundary}',
    }

    response = request_context.post(upload_url, data=body, headers=headers)
    assert response.status == 200, f"Upload failed with status: {response.status}"
    assert response.ok
    assert response.json()
    print('\n', response.json())

效果:

「技术教程」使用Playwright进行API接口测试-Eswlnk Blog

官方写法:

with open(file_path, 'rb') as file:
    file_content = file.read()
    response = request_context.post(upload_url, multipart={
        "fileField": {
            "name": "demo.txt",
            "mimeType": "text/plain",
            "buffer": file_content,
        }
    })
print('\n', response.json())

效果:

「技术教程」使用Playwright进行API接口测试-Eswlnk Blog

官方写法我不知道为啥不行,有大侠知道的还请帮忙给个例子,小弟不胜感激!

写在最后

我还是觉得微软很强,这套框架确实比selenium略胜一筹,综合来看。

终于有时间更新一篇文章,觉得有用的话,转发留言都可以,谢谢!对了,那个上传文件的问题,还请前辈们帮忙看看呀!

本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
APIPlaywrightpython安全测试
1
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
「日志记录」雷池WAF+FRP内网穿透折腾日记
上一篇
「玩物志趣」微信支付退款和退款结果查询接口简单实现(.Net 7.0)
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 小工具开发之EdgeOne免费计划兑换工具
  • 研究日志:ERA5-Land数据解析问题
  • 开发日志:解决Windows平台无法使用Metview解析数据的难题
  • 「攻防对抗」从上传漏洞到Getshell | 一次完整的渗透过程
  • 「日志记录」逆向必应翻译网页版API实现免费调用
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

Sumif函数的使用方法?如何使用Sumif函数?
2023-06-07 20:52:42
如何搭建一个定制版的NewBing?享受AI带给自己的乐趣!
2023-06-10 0:43:18
如何使用Python逆序输出数字?
2023-02-26 23:10:16

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.779 秒   |  SQL查询 33 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈