selenium
1.Selenium简介
Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。
2.支持多种操作系统
如Windows、Linux、IOS、Android等。
3.安装Selenium
pip install Selenium
4.安装浏览器驱动
Selenium3.x调用浏览器必须有一个webdriver驱动文件
Chrome驱动文件下载:点击下载chromedrive
Firefox驱动文件下载:点解下载geckodriver
5.配置环境变量
设置浏览器的地址非常简单。 我们可以手动创建一个存放浏览器驱动的目录,如: F:\GeckoDriver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下。
我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将“F:\GeckoDriver”目录添加到Path的值中。比如:Path字段;F:\GeckoDriver
参考配置环境变量
6.Selenium提供了8种定位方式
- id
- name
- class name
- tag name
- link text
- partial link text
- xpath
- css selector
7.定位元素的8种方式
定位一个元素 | 定位多个元素 | 含义 |
---|---|---|
find_element_by_id | find_elements_by_id | 通过元素id定位 |
find_element_by_name | find_elements_by_name | 通过元素name定位 |
find_element_by_xpath | find_elements_by_xpath | 通过xpath表达式定位 |
find_element_by_link_text | find_elements_by_link_tex | 通过完整超链接定位 |
find_element_by_partial_link_text | find_elements_by_partial_link_text | 通过部分链接定位 |
find_element_by_tag_name | find_elements_by_tag_name | 通过标签定位 |
find_element_by_class_name | find_elements_by_class_name | 通过类名进行定位 |
find_elements_by_css_selector | find_elements_by_css_selector | 通过css选择器进行定位 |
8.Selenium库下webdriver模块常用方法的使用
set_window_size() 设置浏览器的大小
back() 控制浏览器后退
forward() 控制浏览器前进
refresh() 刷新当前页面
clear() 清除文本
send_keys (value) 模拟按键输入
click() 单击元素
submit() 用于提交表单
get_attribute(name) 获取元素属性值
is_displayed() 设置该元素是否用户可见
size 返回元素的尺寸
text 获取元素的文本
9.鼠标事件
在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。
ActionChains(driver) 构造ActionChains对象
context_click() 执行鼠标悬停操作
move_to_element(above) 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element(above) 执行鼠标悬停操作
context_click() 用于模拟鼠标右键操作, 在调用时需要指定元素定位
perform() 执行所有 ActionChains 中存储的行为,可以理解成是对整个操作的提交动作
10.键盘事件
Selenium中的Key模块为我们提供了模拟键盘按键的方法,那就是send_keys()方法。它不仅可以模拟键盘输入,也可以模拟键盘的操作。
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
组合键的使用
send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1…Fn) 键盘 F1…Fn
11.获取断言信息
不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较。这个比较的称之为断言。通过我们获取title 、URL和text等信息进行断言。
title 用于获得当前页面的标题
current_url 用户获得当前页面的URL
text 获取搜索条目的文本信息
多进程、多线程、多协程
点击链接查看
在了解这三者之前,先知道什么是并行和并发
并发指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现多个任务一起执行。多个任务如果被分配给了一个cpu内核,那么这多个任务之间就是并发关系,并发关系的多个任务之间并不是真正的‘“同时”。
并行指的是任务数小于cpu核数,任务真的一起执行。多个任务如果被分配给了不同的cpu内核,那么这多个任务之间执行时就是并行关系,并行关系的多个任务时真正的“同时”执行。
三者区别
进程是资源分配的单位
一个进程可以包含多个线程
进程切换需要的资源大,效率低
线程切换需要的资源不大,效率一般(不考虑GIL的问题)
一个程序至少有一个进程
进程执行过程中拥有独立的内存单元,而多个线程共享内存,极大的提高了程序的运行效率
协程切换消耗的资源很少,效率高
多进程、多线程根据cpu核数不一样,可能是并行的也可能是并发,但是协程是在一个线程中,所以并发
如何使用
CPU密集型:多进程
IO密集型:多线程(协程维护成本较高,而且在读写文件方面效率没有显著提升)
CPU密集和IO密集:多进程+协程
python装饰器
了解装饰器之前,先了解一下什么是闭包
什么函数可以被称为闭包函数呢?主要是满足两点:函数内部定义的函数;引用了外部变量但非全局变量。
有了闭包函数的概念,我们再去理解装饰器会相对容易一些。python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象(函数的指针)。装饰器函数的外部函数传入我要装饰的函数名字,返回经过修饰后函数的名字;内层函数(闭包)负责修饰被修饰函数。
flask、Django、restful
点击链接查看
ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。
异步任务celery
Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。
它是Python写的库,但是它实现的通讯协议也可以使用ruby,php,javascript等调用。
异步任务除了消息队列的后台执行的方式,还是一种则是定时计划任务。
Celery 是一个强大的分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。
我们通常使用它来实现异步任务(async task)和定时任务(crontab)。
组件:
- 任务(tasks)–用户定义的函数,用于实现用户的功能,比如执行一个耗时很长的任务
- 中间介(Broker)–用于存放tasks的地方,但是这个中间介需要解决一个问题,就是可能需要存放非常非常多的tasks,而且要保证Worker能够从这里拿取
- 执行者(Worker)–用于执行tasks,也就是真正调用我们在tasks中定义的函数
- 存储(Backend)–把执行tasks返回的结果进行存储,以供用户查看或调用
点击查看
docker
镜像、容器、仓库
开发人员可以通过打包应用和依赖包到一个可移植的容器中,容器是完全使用沙箱机制,相互之间不会有任何接口,然后发布到任何流行的服务器上,也可以实现虚拟化。
上述微服务模块变多,需要持续集成工具管理;同理当Docker容器变多和复杂,管理和调度也是一个问题。
k8s
用做灵活和便捷管理和调度Docker容器,提供应用部署、规划、更新、维护的一种机制,让部署容器化的应用简单并且高效,支持自动化部署、大规模可伸缩、应用容器化管理。
lambda表达式
- lambda表达式是一种匿名方法。
- 作用:作为参数传递时语法简洁,优雅,代码可读性强。随时创建和销毁,减少程序耦合度。
- 语法
变量 = lambda 形参: 方法体
变量(实参)
mysql
查看已有库
show databases;
创建库
create database stu character set utf8;
切换库
use 库名;
查看当前所在库
select databse();
删除库
drop databse 库名;
索引
优点:加快查询效率
缺点:占用数据库物理存储空间,当对表中的数据进行更新时,索引需要动态维护,降低数据写入效率
索引分类
普通索引:字段值无约束,KEY标志位MUL
唯一索引:字段值不允许重复,但允许为null,KEY标志位UNI
主键索引:一个表只能有一个主键字段,主键字段不允许重复,且不能为null,KEY标志位PRI,通常设置记录字段为id,能唯一锁定一条记录。
表连接
如果多个表存在一定关联关系,可以多表在一起进行查询操作,其实表的关联整理与外键约束之间并没有必然联系。
但是基于外键约束设计的具有关联性的表往往会更多使用关联查询查找数据。
笛卡尔积就是将A表的每一条记录与B表的每一条记录强行拼在一起。所以,如果A表有n条记录,B表有m条记录,笛卡尔积产生的结果就会产生n*m条记录。
select * from person inner join dept;
## 左连接 : 左表为主表,显示右表中与左表匹配的项
SELECT 字段列表
FROM 表1 LEFT JOIN 表2
ON 表1.字段 = 表2.字段;
select * from person left join dept on person.dept_id =dept.id;
## 右连接 :右表为主表,显示左表中与左表匹配的项
SELECT 字段列表
FROM 表1 RIGHT JOIN 表2
ON 表1.字段 = 表2.字段;
select * from person right join dept on person.dept_id =dept.id;
事务
事务的定义:一件事从开始到发生的过程
作用:确保句操作过程中的安全
事务的四大特性
原子性:一个事务必须视为一个不可分割的最小工作单元,对于一个事务来说,不可能只执行其中的一部分操作,整个事务中的所有操作要么全部提交成功,要么全部失败回滚
一致性:事务完成时,数据必须处于一致状态,数据的完整性约束没有被破坏。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,而多个事务相互独立。隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
持久性:一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。
事务隔离级别
读未提交:事物A和事物B,事物A未提交的数据,事物B可以读取到
这里读取到的数据叫做“脏数据”
这种隔离级别最低,这种级别一般是在理论上存在,数据库隔离级别一般都高于该级别
读已提交:事物A和事物B,事物A提交的数据,事物B才能读取到
这种隔离级别高于读未提交
换句话说,对方事物提交之后的数据,我当前事物才能读取到
这种级别可以避免“脏数据”
这种隔离级别会导致“不可重复读取”
可重复读:事务A和事务B,事务A提交之后的数据,事务B读取不到
事务B是可重复读取数据
这种隔离级别高于读已提交
MySQL默认级别
虽然可以达到可重复读取,但是会导致“幻像读”
串行化:事务A和事务B,事务A在操作数据库时,事务B只能排队等待
这种隔离级别很少使用,吞吐量太低,用户体验差
这种级别可以避免“幻像读”,每一次读取的都是数据库中真实存在数据,事务A与事务B串行,而不并发