MySQL查询语句和更新语句如何执行
一条SQL查询语句是如何执行的?现在我们有一条非常简单的表,表里只有一个ID字段,在执行下面这个查询语句时:
1SELECT * FROM t WHERE id=10;
我们看到只是输入一条语句,返回了一个结果,却不知道这条语句在MySQL内部的执行过程。我们将MySQL拆解一下,看看里面的内容,下面将给出MySQL的基本架构示意图,从中可以很清楚的看到SQL语句在MySQL的各个功能模块中的执行过程。
大体来说,MySQL可以分为Server层和存储引擎层两部分。
Server层Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等)。所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。
也就是说,在执行 create table 建表的时候,如果不指定引擎类型, ...
MySQL索引
什么是索引
官方定义:一种帮助MySQL提高查询效率的数据结构
索引数据结构:
索引的优点
大大加快数据查询速度
索引的缺点
维护索引需要耗费数据库资源
索引需要占用磁盘空间
当对表的数据进行增删改的时候,因为要维护索引,速度会受到影响
索引分类主键索引设定为主键后数据库会自动建立索引,innodb为聚簇索引,主键索引索引列值不能有空
单值索引也称:单列索引、普通索引
即一个索引只包含单个列,一个表可以有多个单列索引
唯一索引索引列的值必须唯一,但允许有空值,唯一索引索引列值可以存着null,但是只能存着一个null
复合索引即一个索引包含多个列
Full Text 全文索引(My5.7版本之前 只能由于MYISAM引擎)全文索引类型为FULLTEXT,在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引可以在CHAR、VARCHAR、TEXT类型列上创建。MYSQL只有MYISAM存储引擎支持全文索引
索引的基本操作主键索引(自动创建)
建表 主键自动创建主键索引
12345CREATE TABLE t_user( id VARCHAR ...
测试框架搭建理论
测试框架搭建测试框架好比工具箱,其作用是可以便捷、高效地完成测试工作。而测试框架的引入,往往不是一蹴而就的,好的测试框架都是在实践中逐渐演化而来的。
自动化测试框架的构成
一个成熟的测试框架主要由四部分组成:基础模块、管理模块、运行模块和统计模块。
1. 基础模块如果把自动化测试框架比作一辆汽车,那么自动化测试基础模块就是那四只轮胎,没有它们,这辆汽车寸步难行,它们一般包括如下部分。
底层核心驱动库: 一般指用于操作被测试应用程序的第三方库,例如在 Web 端的 Selenium/WebDriver。
可重用的组件: 一般用来降低开发成本,常见的有时间处理模块、登录模块等。
对象库: 存储被测试对象的仓库。在实际应用中,常常将页面进行分组,把一个页面上的所有对象放到一个类里,也就是 Page Object 模式。
配置文件: 包括测试环境的配置和应用程序的配置。
测试环境配置,指的是一个功能从开发代码完成到上线,往往要经过几个测试环境的测试,测试环境的配置能够减少环境切换成本;
应用程序配置,主要包括被测试程序的一些配置,利用配置文件,可以做到在不更改代码的情况下覆盖相同程序的不同程 ...
Selenium IDE
Selenium IDE下载及安装
官网
Chrome插件
Firefox插件
github release
其他版本
注意:Chrome插件在国内无法下载,Firefox可以直接下载
启动IDE
安装完成后,通过在浏览器的菜单栏中点击它的图标来启动它
如果没看到图标,首先确保是否安装了Selenium IDE扩展插件,其次可以在下面的地址访问所有插件
Chrome浏览器输入:chrome://extensions
Firefox浏览器输入:about:addons
录制第一个用例
启动Selenium IDE后,创建新项目,系统将提示为其命名
然后要求提供URL:要录制测试脚本的网站URL。设置一次就可以在整个项目的所有测试中使用
在页面的操作都将记录在IDE中。操作完成后,请切换到IDE窗口,并单击[停止]录制图标
停止后,为刚录制的Test取名
IDE的使用
新建、保存、打开
开始和停止录制
运行8中的所有的实例
运行单个实例
调试模式–单步执行当前选中的测试用例
调整案例的运行速度
要录制的网址
实例列表
动作、目标、值
对单条命令的解释
Command ...
Selenium介绍
Selenium Java篇
Selenium的介绍Jason Huggins在2004年发起了Selenium项目,当时身处ThoughtWorks的他,为了不想让自己的时间浪费在无聊的重复性工作中,幸运的是,所有被测试的浏览器都支持Javascript。Jason和他所在的团队采用Javascript编写一种测试工具来验证浏览器页面的行为;这个JavaScript类库就是Selenium core,同时也是seleniumRC、Selenium IDE的核心组件。Selenium由此诞生,这也是最早期的Selenium1.0。
2006年,Google的工程师Simon Stewart启动了WebDriver项目,此项目可以直接让测试用具调用浏览器和操作系统本身提供的内置方法,以此绕过JavaScript环境的沙盒限制,WebDriver项目的目的就是解决Selenium带来的痛处。随着新版本浏览器的发布,Selenium1.0被越来越多的浏览器内部安全机制所限制。2008年,Selenium项目和WebDriver项目进行了合并,于是Selenium WebDriver2(简称S ...
Selenium之Page Object模式
Selenium之Page Object模式Page Object Model(POM)方案发展史
2013 Martin Flower:https://martinfowler.com/bliki/PageObject.html
2015 Selenium:https://github.com/SeleniumHQ/selenium/wiki/PageObjects
Selenium Python Client:https://selenium-python.readthedocs.io/page-objects.html
Mozilla PyPOM:https://pypom.readthedocs.io/en/latest/
PageObject模式
做法
以页面未单位独立建模
隐藏实现细节
本质面向接口编程
优点
减少重复find click样板代码
易读性提高
页面修改不影响测试用例
Image From Martin Fowler
Selenium 正式引入2015年3月,selenium正式引入PageObjects模式
官网介绍PageObject模式
P ...
Selenium之页面元素定位方法
页面元素的定位方法Webdriver提供了findElement和findElements函数进行单个元素和一组元素的定位
定位方法
定位方法的Java语言实现实例
id定位
Driver.findElement(By.id(“属性id的值”));
name定位
Driver.findElement(By.name(“属性name的值”));
link的全文字定位
Driver.findElement(By.linkText(“链接的全部文字内容”));
link部分文字定位
Driver.findElement(By.partialLinkText(“链接的部分文字内容”));
标签名定位
Driver.findElement(By.tagName(“页面中的HTML标签名称”));
class名称定位
Driver.findElement(By.className(“页面中的Class标签名称”));
xpath方式定位
Driver.findElement(By.xpath(“Xpath定位表达式”));
css方式定位
Driver.fi ...
测试框架设计思路
测试框架设计价值
简化自动化测试技术
规范领域测试模型
数据驱动与API相结合
自动生成用例:分析的结构化数据,生成代码格式的用例非常复杂,直接保存为数据格式更好的
与云平台对接:数据保存到了数据库的表结构里,数据的传输转换也更适合使用数据
测试框架设计思路测试框架的核心要素xUnit
Test Runner
Test Case
Test Fixtures
Test Suites
Test Execution
Test Result Formatter
Assertions
xUnit框架体系
Java:Junit4、TestNG、JUnit5
Python:UnitTest、PyTest
几乎所有的语言都是xUnit实现
测试框架的用途
单元测试
Web自动化测试Selenium
Appium自动化测试Appium
接口自动化测试Requests、Rest-Assured
承载特定领域的测试用例管理
领域建模与抽象封装
业务领域建模
自动化领域建模
抽象为资源对象、操作方法、状态切换
Page Object模式
用例表达方式
TDD:xUnit
junit/testng+p ...
JsonPath 与 Mustache 请求传参的模板化技术
在实际的接口测试时,传参有时候可能需要很多,也可能我们就是想要一份完整的参数,必填项和非必填项都包含在内,比如下面的 json:
12345678910111213141516171819202122232425262728293031323334353637{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melvi ...
Android常用命令
Android常用命令adbadb:Android Debug Bridge
adb devices:查看设备
adb kill-server:关闭adb的后台进程
adb tcpip:让Android脱离USB线的TCP连接方式
adb connect:连接开启了TCP连接方式的手机
adb logcat:Android日志查看
adb bugreport:收集日志数据,用于后续的分析,比如耗电量
adb shelladb shell本身就是一个Linux的shell,可以调用Android内置命令
adb shell
adb shell dumpsys
adb shell pm
adb shell am
adb shell ps
adb shell monkey
获取App的信息
App信息
获取当前界面元素:adb shell dumpsys activity top
获取任务列表:adb shell dumpsys activity activities
App入口
adb logcat | grep -i displayed
aapt dump badging m ...