web自动化实现登录的几种方式

目录

前言

一、python+unittest框架实现登录功能

二、python+selenium实现登录功能

三、python+requests库实现登录功能


前言

今天主要想介绍python语言+不同的自动化测试框架的结合方式来模拟登录功能。想了解自动化测试框架的同学不要错过哦!


一、python+unittest框架实现登录功能

1.封装公共方法

在common目录下封装方法,具体代码如下:

import requests
class RequestHandler:def __init__(self):"""session管理器"""self.session = requests.session()def visit(self,method,url,params = None,data=None,json=None,headers=None):result = self.session.request(method,url,params=params,data=data,json=json,headers=headers,verify=False)try:#返回json结果print(result)return result.json()except Exception:return 'not json'def close_session(self):self.session.close()

2.调用

创建文件:test_login.py,在文件中可结合allure报告实现登录的不同场景。具体代码如下:

import unittest
import allure
import os
import pytest
from common.requests_handler import RequestHandler@allure.epic("web自动化")
@allure.feature("登录功能")class TestLogin(unittest.TestCase):def setUp(self):#请求类实例化self.req = RequestHandler()def tearDown(self):self.req.close_session()@allure.severity("critical")@allure.title("正确的用户名、密码登录")def test_login_success(self):"""正确的用户名、密码"""with allure.step("step1:输入正确的用户名、密码"):print("输入正确的用户名、密码")with allure.step("step2:校验登录结果:登录成功"):print("登录成功")login_url = 'https://example.com/login'body = {"name":"test","password":"test1234"}res = self.req.visit('post',login_url,json=body)#根据请求结果中的code进行断言print(res)self.assertEqual(0,res['code'])@allure.title("错误的用户名、正确的密码登录")def test_login_wrong_name(self):"""错误的用户名、正确的密码"""with allure.step("step1:输入错误的用户名、正确的密码"):print("输入错误的用户名、正确的密码")with allure.step("step2:校验登录结果:登录失败,报错提示:用户不存在"):print("登录失败")login_url = 'https://example.com/login'body = {"name":"test1","password":"test1234"}res = self.req.visit('post', login_url, json=body)# 根据请求结果中的code进行断言self.assertEqual(16020, res['code'])#根据请求结果中的message进行断言self.assertEqual("用户不存在",res['message'])@allure.title("正确的用户名、错误的密码登录")def test_login_wrong_pwd(self):"""正确的用户名、错误的密码"""with allure.step("step1:输入正确的用户名、错误的密码"):print("输入正确的用户名、错误的密码")with allure.step("step2:校验登录结果:登录失败,报错提示:账号有误,登录失败"):print("登录失败")login_url = 'https://example.com/login'body = {"name":"test","password":"test12"}res = self.req.visit('post', login_url, json=body)# 根据请求结果中的code进行断言self.assertEqual(16002, res['code'])#根据请求结果中的message进行断言self.assertEqual("账号有误,登录失败",res['message'])if __name__ == '__main__':pytest.main(['-vs', 'test_login.py', '--clean-alluredir', '--alluredir=allure-results'])os.system(r"allure generate -c -o allure-report")

二、python+selenium实现登录功能

1.selenium自动化

创建文件test_login.py文件,结合allure+selenium实现登录并获取cookies传递给后面的请求。具体代码如下:

import allure
import pytest
import os,time
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
timestamp = time.time()@allure.feature("web自动化测试")
@allure.title("登录")
def test_login():"""采用selenium框架登录获取cookie成功"""driver = webdriver.Chrome()# 窗口最大化driver.maximize_window()# 打开网页driver.get("https://example.com")time.sleep(2)#刷新页面driver.refresh()#截屏driver.get_screenshot_as_file("D:\\test\\1.jpg")# 实例化 By 类的对象by_xpath = By.XPATH# 元素获取及点击# 使用by_xpath 对象调用 xpath 方法driver.find_element(by=by_xpath, value="//input[@id = 'identifier']").send_keys("填具体的用户名")driver.find_element(by=by_xpath, value="//input[@id = 'password']").send_keys("填密码")driver.find_element(by=by_xpath, value=("//button[@class = 'ant-btn ant-btn-primary sc-htpNat guSfSS']")).click()time.sleep(5)#获取cookiescookies = driver.get_cookies()for cookie in cookies:print("%s -> %s" %(cookie['name'],cookie['value']))#cookies做拼接cookies_list = [cookie["name"] + "=" + cookie["value"] for cookie in driver.get_cookies()]cookies = ';'.join(it for it in cookies_list)print(cookies)"""新建文件夹"""createDir_url = '具体新建文件url'body = {"bucket": "common","project_id": project_id,"path": "test-mkdir","zone": zone}headers = {'Cookie': f'{cookies}','X-Box-Fe-Token': Token}res = requests.post(createDir_url, headers=headers, json=body)resp = res.json()print(resp)assert (0,resp['code'])"""删除文件夹"""deleteDir_url = '具体删除url'body = {"bucket": "common","project_id": project_id,"path": "test-mkdir","zone": zone}headers = {'Cookie': f'{cookies}','X-Box-Fe-Token': Token}res = requests.delete(deleteDir_url, headers=headers, json=body)data = res.json()print(data)assert (0,data['code'])#关闭浏览器driver.quit()if  __name__ == '__main__':pytest.main(['-vs', 'test_login.py', '--clean-alluredir', '--alluredir=allure-results'])os.system(r"allure generate -c -o allure-report")

三、python+requests库实现登录功能

1.封装公共方法

首先在common文件夹下封装公共方法,具体代码如下:

#!/usr/bin/env python
# _*_coding:utf-8_*_
import requestsfrom log.log_record import log_printdef post_main(url, data, header):"""post请求:param url::param data::param header::return:"""try:res = requests.post(url=url, json=data, headers=header)return res.json()except Exception as e:log_print().error(f"接口请求错误,请求参数:{data},请求Url:{url},请求结果:{res.json()}")def get_main(url, header):"""get请求:param url::param header::param param::return:"""try:res = requests.get(url=url, headers=header)return res.json()except Exception as e:log_print().info(f"接口请求错误,请求Url:{url},请求结果:{res.json()}")def run_main(method, url, header, data=None):"""被调用主request:param method::param url::param header::param data::param file::return:"""try:res = Noneif method == 'post' or method == 'POST' or method == 'Post':res = post_main(url, data, header)elif method == 'get' or method == 'GET' or method == 'Get':res = get_main(url, header)else:log_print().error(f"请求方法:{method}格式错误")return resexcept Exception as e:log_print().error(f"请求方法报错{e}")if __name__ == '__main__':pass

2.调用

创建test_login.py文件,调用requests库方法实现登录。具体代码如下:

import requestsurl = 'https://example.com/login'
data = {'username': 'admin','password': '123456',
}response = requests.post(url, data=data)
print(response.content.decode("utf-8"))
headers = response.headers
print(headers.get('Set-Cookie'))

介绍了上述内容,你学废了吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 下 QT开发环境的搭建:

下载QT:Index of /archive/qt/5.14 下载Cmake :CMake - Upgrade Your Software Build System (1)QT在windows,C, 打包exe: step1:window上安装QT软件: Windows下的QT系统开发环境搭建_qt windows-CSDN博客. step2:新建一个界面工程: (1)打…

【css】渐变效果

css渐变效果 使用 CSS 渐变可以在两种颜色间制造出平滑的渐变效果。 用它代替图片,可以加快页面的载入时间、减小带宽占用。同时,因为渐变是由浏览器直接生成的,它在页面缩放时的效果比图片更好,因此你可以更加灵活、便捷的调整页…

postgresql16 物理复制与逻辑复制的实现和对比

本文面向想要练习 PostgreSQL 中数据库复制基础知识但可能无法访问远程服务器的初学者。我认为学习新技术时,在自己的机器上运行示例以巩固概念是至关重要的。对于副本来说,这可能很困难,因为许多可用的资源假设用户具有一定的 PostgreSQL 经…

网页屏幕适配通透了

一,如果设计尺寸固定 那就按照固定尺寸开发 一般都是1920*1080 二,需要适配多种像素屏幕(大屏可视化) 可使用媒体查询设置多套css样式或者使用自适应单位,%,vw,vh 最好解决方案rem&#xff…

IPv6路由综合运用

一、基础配置: SWA: sw1(config)#host swA swA(config)#ipv6 ena swA(config)# vlan 100 swA(config-vlan100)#int vlan 100 swA(config-if-vlan100)#ipv6 ena swA(config-vlan100)#ip add 172.16.1.1 255.255.255.252 swA(config-if-vlan100)#int e1/0/24 swA(conf…

教育科学杂志教育科学杂志社教育科学编辑部2023年第12期部分目录

“思政教育联合思维导图”教学模式在肝病感染控制护理临床教学中的应用 黄雪霞;陈海涵;蒋雅文 中职语文教学中厚植爱国主义情怀的要点分析 苏琴 职业素养视角下中职计算机专业课程教学改革实践 李石 产教融合背景下高职院校产业学院建设模式的实践探索 郭洋 《工程制图与CAD》课…

数据结构学习 jz31 栈的压入、弹出序列

关键词:模拟 栈 不太熟,调了好一阵子。 题目:https://leetcode.cn/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/ 思路: 主要是利用一个辅助栈,来模拟这个过程,如果过程不行就返回失败。 int sig 0;如…

Java研学-分页查询

一 分页概述 1 介绍 将大量数据分段显示,避免一次性加载造成的内存溢出风险 2 真假分页 ① 真分页   一次性查询出所有数据存到内存,翻页从内存中获取数据,性能高但易造成内存溢出 ② 假分页   每次翻页从数据库中查询数据&#xff0c…

解决计算机中vcruntime140.dll错误!六种方法教你修复

什么是vcruntime140.dll文件呢?为什么会出现丢失的情况?如何解决这个问题呢?本文将为您详细介绍vcruntime140.dll文件的作用、丢失原因以及6个快速解决方法。 一、vcruntime140.dll是什么文件? vcruntime140.dll是Visual C Redi…

聚合收益协议 InsFi :打开铭文赛道全新叙事的旋转门

​“InsFi 协议构建了一套以铭文资产为基础的聚合收益体系,该体系正在为铭文资产捕获流动性、释放价值提供基础,该生态也正在成为铭文赛道掘金的新热土。” 在 2023 年年初,Ordinals 协议在比特币链上被推出后,为比特币链上带来了…

STC51+TLC2543+ADXL335+proteus

51单片机解析adxl335振动检测蜂鸣器报警课设 通过按键调整振动检测阈值 传感器介绍 TLC2543:12 位精密模数转换器,原理图与引脚功能描述如下所示: 引脚功能1~9、11、12模拟量输入通道10GND电源地13REF-为负基准电压端14REF为正基准电压端…

基于ssm的课程在线教学平台设计与实现论文

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统Java课程教学信息管理难度大,容错率低&#x…

数据资产入表背后:中国To B数字化驶入“数据时代”

数据资产“入表”,更像是一剂通过颠覆旧的生产关系,从根上医治数字化转型的“良方”。 那么,数据资产到底是什么?以及在愈发被规范的数据市场大背景下,对中国的To B企业和To B服务商而言,正在或者即将发生…

【记忆化搜索】

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:【LeetCode】winter vacation training 前言 记忆化搜索是一种优化搜索算法的方法,它可…

基于JavaWeb+BS架构+SpringBoot+Vue基于hive旅游数据的分析与应用系统的设计和实现

基于JavaWebBS架构SpringBootVue基于hive旅游数据的分析与应用系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 1 概 述 5 1.1 研究背景 5 1.2 研究意义 5 1.3 研究内容…

Java实现二维码、条形码生成器

文章目录 前言 在数字化时代,二维码已经成为了信息交流的一种常见方式。它们被广泛用于各种应用,从产品标签到活动传单,以及电子支付。本文将向您展示如何在Spring Boot应用程序中整合ZXing库,以创建和解析QR码。无论您是想为您的…

常用文件文档能做二维码吗?多种文件在线做二维码的方法

二维码是现在工作和生活中随处可见,可以用来展现很多不同的内容。现在很多下发通知的文件、教程或者其他文件内容,也会制作成二维码图片后,让其他人通过扫码来获取文件内容。最简单的制作方法就是通过二维码生成器来制作,支持多种…

【KMP】【二分查找】【C++算法】100207. 找出数组中的美丽下标 II

作者推荐 【矩阵快速幂】封装类及测试用例及样例 本文涉及的基础知识点 二分查找算法合集 LeetCode100207. 找出数组中的美丽下标 II 给你一个下标从 0 开始的字符串 s 、字符串 a 、字符串 b 和一个整数 k 。 如果下标 i 满足以下条件,则认为它是一个 美丽下标…

usb个人总结

一、usb工具分析 1、不同的usb抓包工具抓包分析 2、USB抓包分析方式 外接usb分析仪分析 (1)力科usb分析仪 (2)HD-USB12 协议分析仪 (3)沁恒CH552 usb分析仪,软件工具USB2.0 Monitor (4)等等…