1、分组查询?

  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 更改所属组

chgrp root gaogao.text

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的生命周期) -> 测试报告 -> 预发布环境 -> 生产环境