1、分组查询?
user表?<br /> id username phone age sex<br /> 查询出username不重复的用户名?<br /> <br /> 1 zhangqigao 1234567 22 男<br /> 2 zhangqigao 3456778 23 男<br /> 3 gaogao 5686382 24 男<br /> <br /> 删除user表中的所有数据?<br /> delete from user<br /> <br /> <br /> <br /> <br /> 思路:<br /> 先查询出 有重复,再排除这些重复<br /> select * from user where username not in (<br /> select username from (<br /> select username,count(1) from user group by username having count(1) > 1) as a )
一、linux操作系统
起源:unix操作系统 -> mini unix
1、目录结构:
切换到根路径: cd /
/bin: binary 二进制 存放命令的目录
/boot: 启动目录,初始化
/dev: device 设备目录,或者存储目录
/etc: 配置文件目录,所有的配置文件,包括:my.cnf,network配置等等
/home: 家目录,创建的用户,会在这个目录下创建对应的用户目录
/lib:library 图书馆,提供linux操作所需的库函数
/opt: options 操作目录,安装一些软件操作部分会在目录。安装jira,默认在这个目录下
/root: root用户的家目录
/sbin: 是super user 的使用命令的目录,比如:root用户才有的操作权限,或者是sudo 后面跟着命令
/tmp: temp 临时文件存储目录。
/usr: 部署应用程序的目录,比如说部署tomcat:/usr/local下
/var: 可变化的,一般动态日志会存放在:/var/log中
2、linux 常用命令
说明:每一个linux命令都是由一个英文单词 或者 多个英文单词缩写
1、cd : change directory
1. 相对路径 和 绝对路径
相对路径:以当前路径为基准:cd /usr(绝对路径);cd local。相对路径后面没有/
绝对路径:是以根路径为基准: cd /usr :绝对路径时候/
2. 点(.)和点点(..)
. : 表示当前路径
.. :上一级路径
返回上一级上一级:cd ../../ 或者 返回多重上级:cd ../../../../
3. 直接输入cd 命令 返回到哪一级目录:
2、ls: list
-ll = ls -l ll是ls -l的别名<br /> -rw-r--r-- 1 root root 372 May 3 10:40 gaogao.text<br /> <br /> - rw- r-- r--<br /> 文件类型 用户权限(user) 用户组(group) 其他用户(other)<br /> <br /> 1.文件类型:<br /> -:普通文件<br /> d: 目录<br /> l:链接文件<br /> 2、权限:<br /> r w x<br /> 4 2 1<br /> 7: 这是一个 8进制的数 <br /> 1 1 1: 转8进制 1(2**2) 1(2**1) 1(2**0)
3、chmod: change mode 更改权限
3种:1、给所有的加权限:<br /> 1、chmod +x gaogao.text<br /> 2、chmod -rx gaogao.text<br />
2、单独添加
1、给用户添加r和x :chmod u+rx gaogao.text<br /> 2、给用户组添加 r: chmod g+r gaogao.text<br /> 3、给其他用户添加 r: chmod o+r gaogao.text<br /> 4、给所有减去 r权限: chmod a-r gaogao.text<br />
3、根据 进制 赋权限
1、所有用户权限: chmod 777 gaogao.text<br /> 1、所有权限: chmod 6(rw)4(r)4(r) gaogao.text
4、chown: change owner 更改用户
1.给某个文件更改所属用户
chown mysql(用户名) gaogao.text(注:mysql这个用户名必须存在)
2. 给某个文件同时更改用户和用户组
chown mysql:mysql gaogao.text
3. 给某个文件夹以及文件夹下面的所有文件全部更改用户和用户组
chown -R mysql:mysql aaa/(前提是aaa是目录)
5、chgrp: change group 更改所属组
6、ps: process 进程
1.查看tomcat进程:<br /> ps -ef|grep tomcat<br /> ps -aux|grep tomcat<br /> grep: Global Regular Expression Print(全局正则表达式)<br />
7、rm:remove 删除
rm -fr aaa<br /> 或者<br /> rm aaa -fr<br /> f:force强制<br /> r:recursive 递归的<br /> <br /> 排除删除:删除除ddd 以外的文件<br /> ls|grep -v ddd|xargs rm -fr {}
8、tar:压缩解压缩
压缩:tar -zc(compress)vf aaa.tar.gz aaa 把aaa压缩成 aaa.tar.gz<br /> 解压缩:tar -zx(extract)vf aaa.tar.gz <br /> 我要解压缩到指定路径: tar -zxvf aaa.tar.gz -C /usr/local
9、netstat :网络
查看端口对应的进程:<br /> netstat -anlp|grep 8080<br /> lsof(list open file) -i:8080
10、查看文件
1、cat<br /> 一次性加载所有文本内容<br /> cat gaogao.text<br /> cat -n gaogao.text<br /> 2、less<br /> 按百分比查看文件内容<br /> less gaogao.text<br /> 3、more<br /> 按页查看文件内容<br /> more gaogao.text<br /> 4、head<br /> 查看 前面行数内容<br /> head -2 gaogao.text<br /> 5、tail<br /> 查看倒数 行数的文本内容<br /> tail -n 2 gagao.text
11、输出重定向
> :表示覆盖的方式输出到文件中 语法:命令 > 文件名<br /> 如:ll(命令) > gaogao(文件名)<br /> ps -ef|grep tomcat(命令) > gaogao(文件名)<br /> >> : 表示追加的方式输出到文件中 语法: 命令 >> 文件名<br /> 如:ll(命令) >> gaogao(文件名)<br />
12、tomcat应用服务器
1、tomcat目录结构<br /> tomcat是干嘛的?<br /> tomcat属于跨平台应用服务器,是给前端提供接口的。<br /> 既支持linux系统,又支持window系统,还支持mac系统<br /> .sh结尾叫shell脚本,是linux或者mac系统执行的文件 <br /> .bat结尾叫批处理脚本,是windows执行的文件<br /> 目录结构:<br /> /bin:执行文件夹: 启动脚本 startup 关闭脚本:shutdown.<br /> /conf:配置文件。配置tomcat端口或者其他的配置,server.xml,默认端口号8080<br /> /lib: 给tomcat运行提供的库函数,或者jar包<br /> /logs: 是tomcat运行产生的日志文件夹,重点日志名:catalina.out<br /> /temp: 临时文件,tomcat运行生产的临时文件夹<br /> /webapps: 部署真正的 java后台程序(.war文件)的文件夹<br /> /work:tomcat运行时产生的进程文件(几乎用不到)
2、日志级别
日志级别:
debug(调试) -> info(信息) -> warn(警告) -> error(报错) -> critical(奔溃)
debug: 调试,输入所有的日志信息
info:信息,只输出java的类名
warn:警告,只输出不符合语法规范的信息
error: 报错,只输出程序报错的日志信息
动态看日志:
tail -f(follow) catalina.out -n 300<br /> tail -300f catalina.out<br /> 一般bug:debug:不满足需求<br /> error:程序报错
二、接口测试
1、http协议:
1、http:超文本传输协议,属于应用层的协议
2、请求和响应
1、请求:<br /> 请求头(header):<br /> accept:接受数据格式<br /> cookie<br /> 请求参数(get)<br /> 请求体(body):<br /> 请求参数(post)<br />
2、响应
响应头:
Connection:keep-alive 表示长连接
Content-Encoding:gzip 文件已被压缩
status: 状态码
…
响应体
返回json格式的字符串
3、状态码:
1xx:信息<br /> 2xx:成功<br /> 200<br /> 3xx:重定向<br /> 302<br /> 4xx:客户端<br /> 403权限<br /> 404不存在<br /> 5xx:服务端<br /> 500服务器错误
4、请求方法:
get、post、delete、put、patch<br /> GET: 获取资源<br /> POST:新增资源<br /> PUT: 更新资源(全部更新) => {"id":1,"name":''帅高高',"age":13}<br /> PATCH: 部分更新 => {"id":1,"age":13} => 选择性的更新<br /> DELETE: 删除资源
5、post和get方法的区别?
1、get的请求参数是在header中,post的请求参数是在body中。<br /> 2、get的请求参数因为是在header,所以有传参字符数限制,post的请求参数是在body中<br /> 没有传参字符数限制。<br /> 3、post方法比get方法安全是相对的,抓包都抓到,只不过请求的时候,一个放手上(get),<br /> 一个放在口袋里面(post)<br /> 2、抓包?
1、fiddler、charles(花瓶)
原理:采用代理的原理。
所有的工具的录制功能,都是采用代理的原理。
3、接口测试
1、接口测试工具 postman、jmeter。
2、参数化
1、参数数据存放:<br /> 1、存放在内存中 => jmeter存放在一个全局变量中,引用: ${变量名}<br /> 2、存放在磁盘中 => 保存在csv文件<br /> 2、参数目的:<br /> 根据不同场景,传入不同参数,以求达到对应的测试结果
3、关联
1、关联的定义:<br /> 上一个接口出参,是下一个接口入参<br /> 2、关联:<br /> 1.为了方便使用,关联的参数不能写死。<br /> 2.上一个接口出参应该保存在一个变量中,下一个接口的入参直接引用这个变量。<br /> 3、关联的目的:<br /> 接口与接口之间相互有联系
4、断言
1、断言的时候,当你的实际结果与预期结果相符,则直接跳过<br /> 如果你的实际结果与你的预期结果不符合,直接报错<br /> <br /> <br /> a.查询字符串: login?username=tom&password=123 => postman get方法:parms<br /> b.rest风格url: regist/tom/123=> path名/值1/值2 => postman get方法:header
三、面试常问的问题?
1、测试和开发的比例?<br /> 1、1:5或者 1:4<br /> 2、你还有什么想问的吗?<br /> 结束语<br /> 你们迭代:2个星期
3、自我介绍?
1、基本情况的介绍:姓名 毕业时间 毕业院校 来自哪里 工作年限。
2、从事工作内容:工作业务
3、优缺点:
优点:沟通能力较强、性格比较外向、工作态度比较负责,工作信心,认真负责等等。
缺点:性子比较直爽,说话比较直接,但是努力积极改进中。
4、为什么离开上一家公司?
思路:千万不要是上一家公司的原因,不要怪罪于你的领导
逼不得已,无可奈何的选择后,跟你们领带沟通过了
5、你是非计算机专业,为什么入软件测试这一行?
填报志愿的第一志愿就是计算机专业,分数不够,被调剂到xxx专业。
毕业之后,发现我有同学入软件测试这一行,发现这一行门槛相对较低。
我后面毅然决然的辞去之前的工作,进入软件测试行业,后面我还是挺喜欢这个行业。
6、你怎么判断是前端还是后端bug?
1、抓包获取接口,然后 通过postman请求这个接口,如果接口报错,
则是后端bug,排查思路:cd /usr/local/tomcat/logs;tail -f catalia.out
不报错:查看数据,对数据进行核对,核对没有问题,则排除后端问题
2、如果后端没有什么问题,则是前端bug,=>F12 查看前端是否报错。
7、测试流程?
强调一点:每一个迭代都是流程
需求评审 -> 测试计划 -> 功能点或者测试用例的编写 -> 评审 ->
用例执行(失败,追踪bug的生命周期) -> 测试报告 -> 预发布环境 -> 生产环境