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

本文涉及的产品
.cn 域名,1个 12个月
简介: 【如何学习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
导入 webdriver
from 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 是登陆成功之前的 title
is_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 打印他的返回结果为 True 还 False
is_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。


相关文章
|
23天前
|
搜索推荐 Python
使用Python自动化生成物业通知单
本文介绍如何使用Python结合Pandas和python-docx库自动化生成物业通知单。通过读取Excel数据并填充至Word模板,实现高效准确的通知单批量制作。包括环境准备、代码解析及效果展示,适用于物业管理场景。
58 14
|
27天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
1月前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
34 4
|
1天前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
87 60
|
1月前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
13天前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
41 7
|
28天前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
43 7
|
27天前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
34 4
|
26天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
1月前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录