【如何学习Python自动化测试】—— Cookie 处理

前提

      网络通信是当今社会最为普及和繁荣的技术之一,其承载了人们生活中瞬息万变的信息传递和交流。而作为网络通信的核心要素,网络协议、socket、cookie和session则是网络通信的灵魂。

一、网络协议

      网络协议是计算机和网络设备之间相互通信的规则和标准。 它规定了数据的传输方式、传输格式、传输速率和错误校验等内容。通常,网络协议由多个层次构成,每个层次负责不同的功能,通过层与层之间的协作,实现了数据的可靠传输和通信的顺畅进行。常见的网络协议包括TCP/IP协议、HTTP协议、FTP协议等等。

常见的网络协议有以下几种:

  1. TCP/IP协议:TCP/IP协议是互联网最常用的协议,它是一种分层协议体系,由传输控制协议(TCP)和互联网协议(IP)两部分组成,负责数据在因特网中的正确传输和路由选择。

  2. HTTP协议:HTTP(Hypertext Transfer Protocol)协议是Web应用程序最常用的协议。它定义了Web浏览器和Web服务器之间交换的信息格式,主要用于客户端发送请求和服务器传回响应。

  3. FTP协议:FTP(File Transfer Protocol)协议是一种用于文件传输的协议。它为客户端和服务器之间的文件传输提供了标准格式和传输方式。

  4. SMTP协议:SMTP(Simple Mail Transfer Protocol)协议用于电子邮件的传输,它定义了电子邮件传输的格式和规则。SMTP协议指定了邮件发送的服务器和接收的服务器,通过建立连接来传输电子邮件。

  5. DNS协议:DNS(Domain Name System)协议是一种用于将域名转换为IP地址的协议。它通过在分布式数据库中搜索域名和IP地址的映射,实现了域名到IP地址的转换。

二、Socket

      Socket是一种用于网络通信的编程接口。 它是在应用层和传输层之间的一个抽象层,负责应用程序之间的数据传输。Socket可以实现不同操作系统及不同编程语言之间的互相通信,并且可以通过不同的协议来进行数据传输。

      在Socket编程中,应用程序可以通过Socket向网络上的其他应用程序发送和接收数据。它使用一种类似于文件I/O操作的方式进行编程,通过调用Socket API提供的函数来实现网络通信。想了解Socket编程可点击Socket通信编程与传输协议分析。

      常见的Socket协议有TCP(传输控制协议)和UDP(用户数据报协议)。TCP是一种面向连接的协议,通过三次握手建立连接,保证数据传输的可靠性,但在传输数据时可能会存在一定的延迟。UDP是一种无连接的协议,可以快速传输数据,但传输过程中数据的丢失或重复出现无法得到保证。

      在网络编程中,Socket被广泛应用于实现各种网络服务和应用程序,例如HTTP服务器、FTP服务器、聊天软件等。Socket编程也是网络编程的核心技术之一。

三、Cookie

      Cookie(通常称为“浏览器Cookie”或“HTTP Cookie”)是一种存储在客户端(浏览器)中的小数据文件,用于在客户端和服务器之间传递信息。它是Web浏览器和Web服务器之间数据交换的重要机制之一。 例如,我们平常使用的网站会在我们登录时使用Cookie来记录我们的用户名和密码,在下一次访问时直接携带Cookie信息,无需重新登录。由于Cookie是在浏览器中存储的,所以它具有跨浏览器和跨域名的优势。

      当浏览器向Web服务器发送请求时,服务器可以在响应头中包含一个Set-Cookie头部,告诉浏览器将一个Cookie存储在本地。浏览器在接收到这个响应后,将会把Cookie存储在本地,并在之后向该服务器发起请求时自动把这个Cookie带上。

      Cookie通常用于实现用户会话管理、用户行为追踪、购物车、广告定向等功能。它可以存储一些简单的数据,如登录状态、用户偏好设置、购物车中的商品信息等。一般来说,Cookie的内容是经过加密处理的,以免被恶意窃取或篡改。

      Cookie有一些限制,如每个域名下Cookie的数量和大小都有限制,浏览器可以禁止Cookie、用户可以手动删除Cookie等。因此,Cookie不适合存储大量或敏感的数据。为了解决这些问题,HTML5提供了一种新的本地存储机制——Web Storage,它可以存储更多数据并且数据不会在每次HTTP请求时被发送到服务器。

四、Session

      Session是一种在Web应用程序中管理用户状态的机制。 它通常用于在Web服务器上存储有关当前用户的信息,以实现用户会话管理。Session是基于服务器端的技术,在用户登录时创建并在用户退出或会话超时后销毁。

      当用户通过Web浏览器访问一个使用Session的Web应用程序时,应用程序将会在服务器上创建一个唯一的会话标识符(session ID)并将其传递给浏览器。浏览器随后将该会话标识符存储在Cookie中,以便在后续的请求中将其发送回服务器。服务器会根据该会话标识符来找到该用户对应的会话数据。

      Session通常用于存储用户的登录状态、用户的购物车信息、用户的偏好设置等信息。Session数据可以存储在服务器的内存中、硬盘上或者数据库中,具体的实现方式取决于Web应用程序的特定需求。

      值得注意的是,Session也有一些限制。例如,当服务器负载过高时,可能会出现Session数据丢失或者超时的情况。因此,Web开发人员应考虑使用其他技术来实现高可用性、高扩展性的Web应用程序。


8 、 Cookie 处理

      通过 webdriver 可以对浏览器中的 cookie 进行处理,常见处理方式有获取 cookie、添加 cookie、删除指定 cookie、删除所有 cookie。

8.1 获取 cookie 信息

from selenium import webdriver	 
from time import sleep	 
drvier=webdriver.Firefox()	 
drvier.get('http://www.chuangyijia.com/login')        
打开前台登陆页面  drvier.implicitly_wait(3)	 
drvier.find_element_by_id('email').send_keys('810155067@qq.com')                                           
输入用户名  drvier.find_element_by_id('pwd').send_keys('a654321')  
输入密码	 drvier.find_element_by_css_selector('#submit').click() 
点击登陆	 cookie = drvier.get_cookies()	 
获取登陆后的 cookie 信息	 print cookie	 
打印获取到的 cookie 信息       

8.2 向 cookie 中添加信息

from selenium import webdriver	 
from time import sleep	 
drvier=webdriver.Firefox()	 
drvier.get('http://www.chuangyijia.com/login')           
打开前台登陆页面 cookie = drvier.add_cookie({'name': 'key-test ', 'value': 'key-test'})	 
添加 cookie 信息   

      添加 cookie,可以使用 add_cookie 方式添加。

8.3 删除 cookie 中的信息

drvier.delete_cookie('ci_session')	 
删除 cookie	 drvier.delete_all_cookies()	 
删除所有 cookie  

9、 expected_conditions

      在自动化测试过程中,通常需要对测试结果做出判断,在此可以通过expected_conditions来实现预期结果的判定,以此来断言执行状况。
      expected_conditions 提供了很多方法,常用的方法如下:

  • title_is:判断当前页面的 title 是否为预期结果

  • title_contains:判断当前页面的 title 是否包含预期字符

  • presence_of_element_located:判断一个元素是否存在,但是不表示该元素可见,如果该元素存在,则返回该元素,否则抛出异常。

  • visibility_of_element_located:判断页面是否存在元素,并且该元素可见,如果存在并可见,则返回该元素,否则抛异常。

  • element_to_be_clickable:判断页面是否存在元素,并且该元素可见可点击,如果存在并可见可点击,则返回该元素,否则抛异常。

  • presence_of_all_elements_located:判断至少有一个页面存在,叧要有一个,则返回一个所有元素的列表 ,否则返回空列表。

  • text_to_be_present_in_element:判断一个元素的文本中是否包含了预期字符串,匹配则返回True,否则返回 False。

from selenium import webdriver
导入 webdriverfrom selenium.webdriver.support import expected_conditions 
导入 expected_conditions 模块from selenium.webdriver.common.by import By
在 expected_conditions 中需要使用定位,by 提供统一使用 find_element()方法, 简化了定位操作from time import sleep
导入 sleep 模块drvier=webdriver.Firefox()
打开浏览器drvier.get('http://www.chuangyijia.com/login')
打开登陆页面drvier.implicitly_wait(3)
等待 3 秒drvier.find_element_by_id('email').send_keys('810155067@qq .com')
输入用户名drvier.find_element_by_id('pwd').send_keys('a654321') 
输入密码drvier.find_element_by_css_selector('#submit').click() 
登陆sleep(2)
此时等待 2 秒,主要是为了获取 title,太快的话,获取的 title 是登陆成功之前的 titleis_title=expected_conditions.title_is(u'首页-创意家') 
判断页面的 title 是否为预期的字符串is_title(drvier)
如果与预期字符串相等,这里返回结果为 True,否则为 False。Title_is 是一个 Class,该 class 中实现了__call__方法,那么这个类对象就能像函数一样调用了。is_in_title=expected_conditions.title_contains(u'创意家') 
判断 title 中是否包含预期字符串is_in_title(drvier)
可以用 print 打印他的返回结果为 TrueFalseis_exist=expected_conditions.presence_of_element_located((By.CSS_SELECTOR,'.sq_menu > a:nth-child(3)'))
判断元素是否存在页面上,不一定会显示在页面上print is_exist(drvier)
如果存在,这里返回元素信息, 否则这里会出现NoSuchElementException 的异常。in_ele=expected_conditions.presence_of_all_elements_locate d((By.TAG_NAME,'li'))
页面是否至少存在一个指定元素print in_ele(drvier)
如果存在,这里返回一个列表, 否则返回列表为空visibility_exist=expected_conditions.visibility_of_element _located((By.TAG_NAME,'li'))
检查元素是否可见visibility_exist(drvier)
如果元素存在并可见, 则返回元素信息,元素不可见,则返回异常, NoSuchElementException 的异常,如果元素存在,但是不可见, 则返回 False。is_text_in_ele=expected_conditions.text_to_be_present_in_element((By.CSS_SELECTOR,'.menu > ul:nth-child(1) > li:nth-	 child(1) > a:nth-child(1)'),u'意')	 
检查元素中是否包含字符串                                   print is_text_in_ele(drvier)                                
如果检查中包含字符串,则返回 True,否则返回 False

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

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

相关文章

相机设置参数:黑电平(Black Level)详解和示例

本文通过原理和示例对相机设置参数“黑电平”进行讲解,以帮助大家理解和使用。 原理 相机中黑电平原理是将电平增大,可以显示更多暗区细节,可能会损失一些亮区,但图像更多的关注暗区,获取完图像信息再减掉。只是为了…

N皇后问题解的个数

暴力递归 #include <stdio.h>int count0,a[15],flag; void queen(int,int); int main(){int n;scanf("%d",&n);queen(n,n);printf("%d",count); } void queen(int n,int n0){if(n<1){flag1;for(int i1;i<n0;i){for(int j1;j<n0;j){if(…

【汉诺塔 —— (经典分治递归)】

汉诺塔 —— &#xff08;经典分治递归&#xff09; 一.汉诺塔介绍二.分治算法解决汉诺塔问题三.汉诺塔问题的代码实现四.主函数测试展示 一.汉诺塔介绍 汉诺塔问题源自印度一个古老的传说&#xff0c;印度教的“创造之神”梵天创造世界时做了 3 根金刚石柱&#xff0c;其中的一…

【Jenkins】jenkins发送邮件报错:Not sent to the following valid addresses:

jenkins报错未能发送邮件到指定邮箱 注意&#xff1a;这是在系统配置中修改 在系统配置》邮件通知中添加配置信息 注意&#xff1a;这个是在项目的配置下修改 配置完成后&#xff0c;重新执行发送邮件成功&#xff01;&#xff01;&#xff01;

量子计算 | 解密著名量子算法Shor算法和Grover算法

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…

unigui同页面内重定向跳转,企业微信内部应用开发获取用户code例子

procedure TMainForm.UniFormCreate(Sender: TObject); varurl: string;code: string; begin //如果没有code值&#xff0c;将进行重定向if UniApplication.Parameters.Values[code] thenbeginurl :https://open.weixin.qq.com/connect/oauth2/authorize?appid你们的企业ID&…

STM32_7(ADC)

一、ADC ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁12位逐次逼近型ADC&#xff0c;1us转换时间输入电压范围&#xff1a;0~3.3V&#xff0c;…

Ubuntu中安装搜狗输入法教程(详细图文教程)

习惯了使用搜狗输入法&#xff0c;这里总结了Ubuntu系统下安装搜狗输入法的详细教程&#xff0c;每个步骤都很详细&#xff0c;耐心安装。 搜狗输入法是一款功能强大、使用方便的输入法&#xff0c;能够有效提升用户在Ubuntu系统中的输入体验。 目录 一、下载搜狗安装包1.1 搜…

HBase数据模型杂谈

1.概述 HBase是一个稀疏、多维度、排序的映射表&#xff0c;这张表的索引是行键、列族、列限定符和时间戳。 每个值是一个未经解释的字符串&#xff0c;没有数据类型。用户在表中存储数据&#xff0c;每一行都有一个可排序的行键和任意多的列。表在水平方向由一个或者多个列族…

数据结构——单链表(Singly Linked List)

1.链表介绍 链表是一种物理储存上非连续、非顺序的存储结构。数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点&#xff08;链表中每一个元素称为结点&#xff09;组成&#xff0c;结点可以在运行时动态生成。 对于上图&#xff0c;每一个结点都是一个结…

Linux中vim的编译链接和gcc

gcc,g,gdb的安装 命令行写gcc,g,gdb根据提示安装:sudo apt install gcc/g/gdb gcc分布编译链接 (1)预编译: gcc -E main.c -o main.i (2)编译: gcc -S main.i -o main.s (3)汇编: gcc -c main.s -o main.o (4)链接 gcc main.o -o main 执行: ./main 或者:全路径/main 编译链…

Vue中实现导出表格的功能

在Vue中实现导出表格的功能&#xff0c;需要使用第三方库&#xff0c;比如xlsx和FileSaver.js。 首先安装依赖&#xff1a; npm install xlsx file-saver --save创建导出表格的方法&#xff1a; import XLSX from xlsx; import { saveAs } from file-saver;export function …

算法-中等-链表-两数相加

记录一下算法题的学习11 两数相加 题目&#xff1a;给你两个非空的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照逆序的方式存储的&#xff0c;并且每个节点只能存储一位数字。请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。你可以假设除了数字…

电力感知边缘计算网关产品设计方案-边缘计算自控算法模型

边缘计算网关与其他数据采集的IoT网关设备不同之处在于可以根据应用场景和产品解决方案,单独设置一些边缘计算算法模型,实现离线系统和边缘计算自控逻辑判别+执行系统方案,自控算法逻辑单元也是边缘计算网关自控系统方案的核心单元。 自控算法逻辑单元根据产品应用不同,有…

C# List<T>的综合用法

1、测试数据 //测试数据string str "";List<byte[]> bytes new List<byte[]>();for(int i0;i<10;i){byte[] bnew byte[2];b[0] (byte)(2 * i);b[1] (byte)(2 * i1);bytes.Add(b);str b[0] " " b[1] " ";}Console.WriteL…

数据结构与算法编程题19

统计二叉树的叶结点个数。 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std;typedef char ElemType; #define ERROR 0 #define OK 1 typedef struct BiNode {ElemType data;BiNode* lchild, * rchild; }BiNode,*BiTree;bool Create_tree(BiTre…

基线扫描tomcat安全加固-检查是否支持HTTPS等加密协议

背景&#xff1a;基线扫描时&#xff0c;docker镜像中的tomcat在检查是否支持HTTPS等加密协议这一项上未通过。 思路&#xff1a;先通过JDK自带的keytool工具生成证书&#xff0c;再从tomcat的server.xml配置文件中增加配置。 我不确定不同版本的JDK生成的证书是否可以通用&a…

php通过curl方式发送接受xml数据

目录 1、php通过curl方式发送xml数据 2、php通过file_get_contents接受curl方式发送xml数据 1、php通过curl方式发送xml数据 <?php function sendXmlData($url, $xmlData) {$ch curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFE…

element plus中表格的合计属性和例子

在 element plus 表格中&#xff0c;您可以使用 summary-method 属性来指定一个函数&#xff0c;计算表格中列的合计或平均值等。该函数应该返回一个对象&#xff0c;其中包含每个列的合计值。例如&#xff0c;如果您的表格数据是这样的&#xff1a; [{ name: John, age: 20, …

Leetcode刷题笔记题解(C++):1008. 前序遍历构造二叉搜索树

思路&#xff1a; 1.树中的第一个值为根&#xff08;数组的第一个值&#xff09;&#xff0c;小于根的值存放在左子树中&#xff0c;大于根的值存放在右子树中&#xff1b; 2.利用递归对左右子树 /*** Definition for a binary tree node.* struct TreeNode {* int val;*…