HTTP协议无状态特性
-
什么是一次会话
- 用户打开浏览器访问某个网站, 在这个网站上浏览任意页面, 访问完成后将浏览器关闭的过程称为是一次会话
-
HTTP协议是无状态的协议,带来的问题
- 一旦数据交换完毕,客户端与服务器的连接就会关闭,再次交换数据需要建立新的连接,这就意味着服务器无法从连接上跟踪会话
- 也就是说即使第一次和服务器连接后并登录成功后,第二次请求服务器依然不能直到当前的请求是那个用户
Cookie
- cookie 就是浏览器储存在用户电脑上的一小段文本文件,是纯文本格式,不包含任何可执行的代码。Web 服务器就可以使用这些信息来识别不同的用户
Cookie典型的应用场景:
- 用户第一次登陆时,勾选下次直接登录或记住密码
Cookie工作原理
Cookie解决的问题
- Cookie就是为了记住用户状态,使用方式如下
- 第一次登录服务器后,如果需要记录该用户状态,服务器就使用Response向客户端浏览器颁发一个Cookie,浏览器会把Cookie数据保存在本地。
- 该用户发送第二次请求的时候,就会自动的把上次请求存储的Cookie数据自动的携带给服务器,服务器检查该Cookie存储name、value等信息,以此来辨认用户状态。
- 服务器也可以根据业务需要修改Cookie的内容
Cookie里用键值对格式存储的信息内容主要有
- name:Cookie信息名--必填项
- value:Cookie的信息的值--必填项
- expire:过期时间
- domain:域名
- path:路径,如果是/,代表所有路径
- secure:True代表只有https能使用Cookie,False代表http和https都可以使用。
- httpOnly:True代表不允许js脚本使用Cookie(保证网站安全,防止XSS攻击)
Selenium自动化测试中Cookie的使用
- webdriver可以读取、添加和删除Cookie信息。
Selenium如何实现自动登录
- pageobject里的前台登录页实现类里增加以下方法,进行cookies操作完成自动登录
- save_cookies:保存前台页登录Cookies到txt格式的文件里,按照用户来保存,不同用户存储在不同文件里。
- read_cookies:如果存在Cookies文件,就从txt格式的文件读取Cookies数据,如果不存在,就登录然后保存一个Cookies文件。
- login_success:读取Cookies信息后,加入到当前驱动对象里,再打开登录页,完成自动登录操作。
保存前台页登录Cookies到文件里
- 保存前台页登录Cookies
- 新建一个cookies文件夹,把前台页登录Cookies按照用户进行保存
- 新建一个cookies文件夹,把前台页登录Cookies按照用户进行保存
读取Cookies文件里的数据
- 如果文件存在,读取文件里的cookies信息返回
- 如果文件不存在,登录保存Cookies并返回
封装登录成功方法
login_success: 读取Cookies信息后,加入到当前的驱动对象里,在打开登录页,完成自动登录操作
删除cookies文件
问题:Cookies是有有效期的,不是一直有效
解决方案:运行测试套件前,删除所有的Cookies文件
优化测试套件
- 运行测试套件前,删除Cookies文件
from ecshop.utils.delete_cookies import DelCookies
if __name__ == "__main__":
DelCookies().delete_cookies_files()
…………
测试案例
- 前台留言板留言功能,增加两组测试登录后留言功能的测试数据
修改测试用例类
- 修改测试用例代码:testcase包里的testcase9002.py
注意事项
- 在Selenium中记录cookie信息,并在下次测试时加入cookie信息,要求不能使用localhost作为测试服务器地址。
- 需要修改为本机具体的对外IP地址。