软件测试工程师必掌握的基础要点

基础技能

1. 前端开发

技术知识点:

HTML:

标签

页面标签:head(头部) body(正文) title(页面标题)

文本标签:font,h1-h6(文本标题从大到小),i (字体倾斜) B(加粗) U(下划线)Strong(加粗)p(段落)br(换行)

水平线:hr

图像:image  src(图片来源) alt(图片不能打开时给出提示)

超链接:a  href(后面接地址)target(页面打开方式)target = blank(重新打开一个页面) target = self(当前页面打开)

表格:table(表格) tr(行) td(列)

表单:文本框 :input type =“text”

      密码框:input type =“password”

按钮:input type = “button”

单选框:input type =“radio”

复选框:input type = “CheckBox”

      下拉框:select  option

  文本域:textarea

其他:ol+li(有序)ul+li(无序)iframe(显示文字)audio(音频)video(视频)marquee(滚动)

属性

Font:color(字体颜色)size(字体大小)face(字体类型)

Image:width(宽)height(高)align(位置)src(图片来源)

Table:bgcolor(背景色)width(宽)height(高)align(位置)cellspacing(格子间的距离)cellpadding(格子内间距)

Tr:bgcolor(背景色)width(宽)height(高)align(位置)

Td:bgcolor(背景色)width(宽)height(高)align(位置)

Hr:width(宽)height(高)align(位置)

其他:controls(播放器控制栏) loop(循环方式)autoplay(是否自动播放)


CSS:

属性

文本类:font-size(字体大小)font-family(字体类型)font-weight(字体重量bold表示加粗)font-style(文本风格normal表示正常显示,italic表示斜体)color (颜色)

位置类:border(边框,三个值:第一个值表示边框线,第二个值表示边框线粗细,第三个是颜色)width(宽)height(高)text-aline (文本水平居中)margin(位置组合属性)  border-spacing(格子间距离) padding(内间距) border-radius(半径设置) line-height(垂直居中,与height一样,且只对单行有效)vertical-align(垂直对齐) float(浮动)position(fixed)(定位)rgba(0,0,0,0-1)(颜色,前三位数是颜色,后面是透明度)。

背景:background-size(大小)background-color(颜色)background-image(图片)

选择器

1. 标签选择器:标签名{css属性}

2. ID选择器:#id名{css属性}

3. Class选择器:.class名{css属性}

4. 组合选择器:(1)父子组合,以空格隔开  #父名  子名 {css 属性}。(2)平级组合,以逗号隔开,  #a名,#b名 {css 属性}。

5. 伪类选择器:一般用于超链接, # a:link,#a:visited { css属性 } #a:hover,#a:active { css属性  }其中有link(默认时)和visited(访问后)时,这两个放一起,hover(悬浮时)和active(激活时)放一起

div

- 盒模型 :margin(外边距)padding(内间距)border(边框)content(内容)

- 浮动:float(left左浮动 right右浮动)

- 定位:position(fixed(绝对定位于窗口的某个位置)absolute(绝对定位于某个页面的位置)relative(相对位置))

- 嵌套:div嵌套div跟表格的tr 里放td一样,外层div 相当于tr,内层div相当于td


Javascript

语法:在head里面写script

输入:prompt(以弹出框的形式输入)

输出:document.write(“”)(向浏览器窗口输出)

Alert()(以弹出框的形式输出)  console.Log()(以日志形式输出)

数据类型:undefined(未定义)null(空)number(数字)string(字符串)Boolean(布尔)

数据类型转换:parseint()把字符串型转换为整形

分支结构:if···else···,switch···case···

循环结构:for(条件){循环体}while(条件){循环体}do{循环体}while(条件)

数组:var  arr = [“1”,“1”,“1”,“1”,“1”]

函数:function 函数名(参数){函数体} 调用时:函数名(参数)

DOM对象:DOM document object model 文档对象模型 ,它是使用JS的方式去操作页面元素,主要是四个方面:增删查改

新增:创建:var  mydiv=document.createElement(‘div’)

设置样式 :mydiv.style.height=‘20px’

添加到页面中:document.write.appendchild(mydiv)

查找:var  mydiv = document.getElementById(“”)

删除:mydiv.remove();

修改:先查找,在设置样式

事件:

鼠标事件:onclick(点击事件)onmouseover(鼠标放上去触发)onmouseout(鼠标移走时触发)

键盘事件:onkeypress 键盘输入时触发 onkeyup 按键松开时触发

表单事件:onfoucs 光标移动上去时触发 onblur 失去焦点是触发 onchange光标内容改变时触发

重点难点:

JavaScript编程逻辑题。

实际应用:

Agileone的几个页面。

官网。

常见面试题:

无。

想办法自己把会的说出来。+5分

我看你简历上面还会前端开发的东西,介绍一下呗?项目思路?所用技术?


注意:如果面试官不会,一定不要有鄙视之类的表情和动作和话语。虚心的。

任务:

花20分钟把前两周做的任务练习看一下,表达出来。专业词汇


2. 数据库

技术知识点:

DDL:数据定义语言

1.数据库的基本操作:

创建数据库 create  database  数据库名称;

查询指定数据库  show create database 数据库名称;

查询数据库:show databases;

删除数据库:drop database 数据库名称;

修改数据库:alter database 数据库名称 + 修改内容 set  修改后内容

2.表的基本操作:

查看数据库中的表:show tables;

创建表:create  table  表名(字段名1 数据类型,字段名2 数据类型 );

查看表结构:desc 表名;

删除表:drop table 表名;

修改表数据:alter  table  表名 过滤条件

过滤条件:add  column 字段名 数据类型(添加字段)

  Drop  column 字段名(删除字段)

  Change column 旧字段名 新字段名 旧字段数据类型(修改字段)

  Modify column 字段名 新数据类型(修改数据类型)

  Rename to 新表名


DML:数据操纵语言

增加内容: insert into 表名(字段名) values (值)(表名后跟了字段名时,值要与表名后字段名的数据类型对应,不跟字段名时,要添加每一个的值)

修改内容:

修改字段某个的值:update 表名 set 字段名 = 新值 where 字段名 = 旧值

修改字段的所有值:update 表名 set 字段名 = 新值

修改多个字段的某个值:update 表名 set 字段名1 = 新值1,字段名2= 新值2 where 字段名1 = 旧值1,字段名2=旧值2;

删除内容:

删除整个表内容:delete from 表名(只删除数据,不能删除约束)

删除整个表内容:truncate table 表名(删除数据和约束)

删除某条内容:delete from 表名 where 条件(条件为要删的那条数据信息)


DQL:数据查询语言

基础和高级

查询所有字段:select * from 表名

查询某个字段:select 字段名 from 表名

查询多个字段:select 字段名1,字段名2 from 表名

查询某一条数据:select * from 表名 where 条件

去重复查询:select distinct 字段名 from 表名

查询空值:select * from 表名 where 字段名 is null

多条件查询:select * from 表名 where 字段名1的值 and 字段名2的值

分页查询:select * from 表名 limit m,d(m是从几条开始查,d是查询几条)

模糊查询:select * from 表名 where 字段like “%”(_)(%表示任意字符,下划线表示一个字符)

排序: select * from 表名 order by 字段名(asc升序 desc 降序)

分组查询:select 字段名1 from 表名 group by 字段1

子查询:select * from 表名1 where 字段名1 in(select 字段名2 from 表名2 where 条件)6联合查询:select * from 表名1 union select * from 表名2

连接查询:

内连接:select * from 表名1 inner join 表名2 on 连接条件

外连接:

左连接:Select * from 表名1 left outer join 表名2 on 连接条件

右连接:Select * from 表名1 right outer join 表名2 on 连接条件

范围查询:select * from 表名 where 字段名 between 值1 and 值2

聚合函数:max()sum()avg()min()count()

Select max(字段名) from 表名

DCL:grant revoke commit rollback

列出关键字和常用语句用法。


三大范式

第一范式:无重复的列(列的原子性),每一列都是不可分割的数据项

第二范式:无重复的行(行的唯一性),满足第一范式,要求实体的属性完全依赖于主键字段

第三范式:主表与外表(消除传递的依赖),满足第二范式,一个数据表中不包含已在其他表中已包含的非主键字段

七大约束

关键字、语法、作用

主键:primary key   语法:字段 数据类型 primary key  作用:指定某个字段的数据不能重复、为空

外键:foreign key    语法:constraint FK_表1_表2 foreign key (从表字段) references 表2(主表字段) 作用:保证数据的一致性和完整性(改变主表关联从表字段的数据时,从表数据也跟着改变)

默认值:default    语法:字段 数据类型 default 值 作用:指定某个字段的默认值

非空:not null 语法:字段 数据类型 not null  作用:指定某个字段不为空

唯一:unique 语法:字段 数据类型 unique 作用:指定某个字段的值唯一

自增长:auto-increment 语法:字段 数据类型 auto-increment 作用:指定某个字段的值每次自动加1

高级

视图 view   create view a select * from student, score where ...  虚表

触发器 trigger  限制约束  多了也不好

存储过程 procedure  把一些sql语句封装到一个方法中   

索引 index 相当于书的目录 查询效率

关键字、语法、作用

视图是一张虚拟表,视图只供查询,数据不可更改,查询数据来源于我们建立的实体表。视图可以从多个复杂的关联表中提取出我们需要的信息,提高查询速度。

触发器:trigger  语法:create trigger 名字after insert on 表1  foreach  row insert into 表2 values(值)  作用:当操作某张表时,同时能触发一些动作和行为

存储过程:procedure 语法:CREATE  PROCEDURE  PRO_TEXT ( 参数列表 )    BEGIN   SQL语句  END  调用存储过程:call 存储过程名(参数) 作用:把一些SQL语句封装到一个方法中,提高执行效率。

索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构。作用:可快速访问数据库表中的特定信息。

重点难点:

DQL的应用。

实际应用:

如何对一个系统设计数据库。

搭建环境,准备数据。

常见面试题:

1.知道哪些约束呢?

主键,外键,自增长,非空,唯一,默认值,主键指定某个字段的值不能重复,为空;外键保证数据的完整性和一致性;自增长指定某个字段的值每次自动加1;非空指定某个字段的值不能为空;唯一指定某个字段的值不能重复;默认值指定某个字段的默认值。

2.主键和外键是拿来干嘛的?

了保证两个表某些数据的一致性。作为外键,它里面的数据必须是在主建中所存在的。举个例子:

有两个关系:

student(s#,sname,d#),即学生这个关系有三个属性:学号,姓名,所在系别

dep(d#,dname),即院系有两个属性:系号、系名

则s#、d#是主键,也是各自所在关系的唯一候选键,d#是student的外键。

3.用过查询吗?

用过,比如条件查询 select * from 表名 where 条件

模糊查询:select * from 表名 where  字段 like 条件

分页查询:select * from 表名 limit m,d

分组查询:select * from 表名 group by 字段1

排序:select * from 表名 order by 字段名{默认降序desc   升序asc}

范围查询:select * from 表名 where 字段 between 值1 and 值2

子查询:一条数据查询的结果用来做另一个数据查询的条件


4.查询出成绩前三名的学生姓名?

SELECT STU_NAME FROM SCORE ORDER BY STU_SC DESC LIMIT 3;

5.一条语句查询男生和女生的平均成绩?

SELECT STU_SEX,AVG(STU_SC) FROM SCORE GROUP BY STU_SEX;

6.把成绩小于60分的同学的成绩改为60。

UPDATE SCORE SET STU_SC = 60 WHERE STU_SC < 60;

7.你只用过mysql吗?sql server、oracle。

遵循的同一个sql规范。

能说出3点区别:

分页查询时:sql server 使用top关键字

Mysql 使用limit关键字  Oracle 不支持mysql中limit功能,但他是通过rownum来限制返回的结果集的行数

字符串拼接:sql server 使用 + ;MySQL使用concat(); Oracle 使用的是||;

大体上讲,Oracle的数字类型更加简单,大部分情况直接设置number类型就行。而不需要像mysql及sqlserver设置各种数字类型。

8.你们测试都是用的root账户,安不安全呢?

是的,因为我们是小型公司,人员比较少,用一个root账号,工作中协调调度都比较方便,如果设置多个管理账户,不利于工作的开展,出现权限问题,要不断的取沟通,浪费了时间,降低工作效率。

任务:

花1个小时打开你的navicat,做以前做过的至少5道题,看其他题,把忘记的补一下,问我。

3. Linux

技术知识点:

命令:

至少4类,20个,中英文

编辑命令:i 从命令模式进入编辑模式

ESC 从编辑模式进入命令模式

:wq 保存并退出

文件操作命令:

Vi 生成新文件或者编辑文件 vi a 生成文件a

Cat 查看文件内容 cat a 查看a的内容

Cp 复制文件 cp a /b 把a复制到b中

Mv 剪切文件 mv a /b 把a剪切到b中

Rm 删除文件 rm a删除文件a

文件夹操作命令:

Ls 显示当前目录内容

Ls-l(ll)显示当前目录详细内容

Pwd 显示当前所在目录

Cd  切换到当前用户所有主目录

Cd a文件夹 切换到文件夹

Cd / 返回主目录

Mkdir 创建目录 mkdir a 创建目录a

Rmdir 删除目录 rmdir a 删除目录a

权限操作命令:

Useradd 新增用户 useradd a 新增用户a

Userdel 删除用户 userdel a 删除用户a

Passwd 修改密码 passwd a 修改用户a的密码

Chmod 修改文件或目录条件(r表示可读,w表示可写,x表示可执行) chmod 777 xxx 把xxx文件的权限修改为777

文件查找命令:

Find 查找文件  find . -type d -name “***”查找目录为***的文件夹

find . -type f -name “***”查找目录为***的文件

Find .-mtime -3(+3)查找当前目录3天前(内)操作过的文件

Grep 查找文件 通常跟管道一起用  比如 ps -ef | grep bash 查看系统正在运行的进程名包含bash 的进程 管道 :左边的输出作为右边的输入

系统管理类命令:

Reboot 重启

Shutdown 关机

Ifconfig 查看当前网卡信息

Ifconfig eth0 192.168.0.55 设置eth0网卡的IP地址

Ifconfig eth0 up 启用eth0网卡

Ifconfig eth0 down 禁用eth0 网卡

Ps 查看当前终端正在运行的进程

Ps -ef查看系统正在运行的所有进程

Kill pid 终极进程 pid 为进程号

重定向 :>覆盖添加  >>累加 比如 a>b 把a文件的内容添加到b中,并覆盖b内容

A>>B把a文件的内容添加到b中,内容是在B文件内容后面累加

Df -h查看磁盘大小

Free -m 查看内存情况

Top 实时查看系统资源

Shell脚本:脚本后缀名.sh 调用时也用sh+脚本名调用

网卡设置脚本内容

#!/bin/bash

Set -x

Para1 = $1

Para2=$2


Service iptables stop

Service network restart

Ifconfig eth0 192.168.${para1}.${para2}

Route add default gw 192.168.${para1}.1

Ping 220.181.57.217


测试当前能ping通的网段

#!/bin/bash

Set -x

For(i=100,i<130,i++)

Do

Result =`ping 192.168.0.${i} -c 2`

Count=`echo${result} | grep `time=` | wc -l`

If[${count} -ne 0]

Then

Echo 192.168.0.${i}>>succ.log

Else

  Echo 192.168.0.${i}>>fail.log

Fi

done


Shell脚本就是把Linux的命令放到脚本中,提高执行效率

测试环境安装:

哪些部分、各是什么作用、安装配置的步骤、过程中的问题

安装VMware虚拟机,装Linux ,lrzsz(用于Windows和Linux之间传输文件)

Gcc(c语言的编译器,因为后续有些软件是C语言写的,需要gcc进行编译安装)

Zip和unzip(用于压缩和解压);Apache 、MySQL、PHP (Java项目就安装 Tomcat、MySQL、jdk)将项目的网站放到Apache相应的目录下,在使用rz把项目压缩包上传至该目录解压,修改项目的权限为最大,修改Apache里Mod_rewrite的AllowOverride ,再在MySQL中创建项目的数据库,并设置访问权限。退出MySQL和关闭Linux se,进入网站进行安装。


重点难点:

命令

环境搭建

实际应用:

搭建测试环境。

常见面试题:

线程和进程各自有什么区别和优劣呢?

进程是资源分配的最小单位,线程是程序执行的最小单位。

进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

1.你熟悉Linux吗?

用过,Linux主要通过命令操作系统,常用命令中文件类

Cp mv rm vi cat mkdir rmdir ls pwd cd find grep

权限类 useradd passwd chmod

系统类 reboot shutdown ps kill df free top

重定向 >覆盖追加  >> 累加

管道 | 左边的输出作为右边的条件

2.介绍下Linux上搭建的web环境?

1.配置java环境

2.下载并安装tomcat

3.安装mysql并导入sql

4.项目导入并修改数据库连接配置

5.启动mysql,启动tomcat。

3.查询和杀死进程的命令?

Ps kill

4.实时查看系统资源

top

5.查看磁盘、内存?

 Df  free

6.测试网络是否连通的?

Ping baidu.com

7.介绍下find和grep命令。

Find 是查找目录下的文件  grep是筛选,对目标内容查找

8.文件权限命令怎么用?

Chmod 777文件名

任务:

至少2个小时,打开linux,操作常见的命令,查看下自己的环境,能够正常运行apache+mysql,tomcat+mysql。

4. Java编程

技术知识点:

变量和数据类型

八大基本数据类型:

Byte型 1字节

Short型 2字节

Int型 4字节

Long型 8字节

Float 型 4字节

Double型8字节

Boolean型 1/8字节

Char 型2字节

控制结构

分支结构:If···else、switch···case

循环结构:for(表达式){代码块}、 do{代码块}while(表达式)、while(表达式){代码块}

面向对象

对象:对象是实实在在的物体;

类:类是对整个事物的描述的一个集合;

类是对象的模板,对象是类的具体体现。

Java的三大特征:封装、继承、多态

封装:是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。作用:提高代码的复用性和安全性。

继承:让类与类之间产生关系,子与父的关系。(原因:子类拥有比父类更加强大的功能和属性)好处:提高代码的复用性和维护性。

多态:事物存在的多种形态。(前提:在继承关系下,有重写和父类引用指向子类对象)好处:提高代码的维护性和可扩展性。

重写:子类出现父类中方法名和参数列表相同的方法叫做重写。

重载:同一类中,方法名相同,参数个数、类型、顺序不同的就叫重载

抽象:abstract修饰的类和方法都是抽象的。包含抽象方法的类是抽象类。

接口:一些方法特征的集合。只有抽象方法的类就是接口。

抽象类只能继承,接口只有实现。

API:

String是不可变的字符序列,Stringbuffer 、Stringbuilder(字符串缓冲序列)可变字符序列

其中Stringbuffer是jdk1.0版本出现,线程安全,效率低

Stringbuilder是jdk1.5版本出现的,线程不安全,效率低

集合:

Collection是集合的接口,list和set接口继承Collection接口,list接口特点:有序,有索引和可以存重复值,set接口的特点:无序,无索引,不可以存重复的值。ArrayList、linkedlist、vector实现了list接口。其中ArrayList和vector的底层是数组,查询、修改数据快,增加、删除数据慢。Linkedlist的底层是链表,查询、修改数据慢,增加、删除数据快。Hashset和treeset实现set接口,hashset的底层是哈希算法,treeset的底层是二叉树算法。

Map是将键映射到值的对象,一个键只能映射一个值,其特点是无序和不可重复。Hashmap和treemap实现map集合,hashmap底层是哈希算法,treemap底层是二叉树算法。

进程:一个可执行程序就是一个进程

线程:进程的基本单元,一个进程的每个任务都是一个线程

线程的生命周期:新建—就行—运行—阻塞(等待、同步、其他)—死亡

Wait()、sleep()、yield()都是阻塞中的方法。

并发:CPU短时间内依次执行多件事,给人的感觉是同时执行多件事。

IO流:字节流和字符流。字节流的父类inputstream和outputstream,字符流的父类是reader和writer。字节流中有fileinputstream(文件字节流,直接操作文件)、bufferedinputstream(缓冲字节流,可以一次读一行)、bytearrayinoutstream(内存数组流,可以向内存中写数据)、objectinputstream(对象流,持久化保存数据)。字符流中有filereader(文件字符流,直接操作文件)、bufferedreader(字符缓冲流,一次读一行)、inputstreamreader(字符转换流,自由转换字符字节流)

重点难点:

面向对象 – 封装、多态、抽象、接口

API -


实际应用:

WoniuATM

Tank


常见面试题:

1.看你还会Java,具体会些什么?


2.面向对象的特征有哪些?

封装、继承、多态。

3.什么是构造方法?3W1H

构造方法就是方法名和类名相同,没有返回值。给对象的数据进行初始化值

4.重写和重载的区别?

重写:子类出现父类中方法名和参数列表相同的方法叫做重写。

重载:同一类中,方法名相同,参数个数、类型、顺序不同的就叫重载

5.接口和抽象类有什么区别?

接口的方法只有抽象方法,抽象类的方法可以有普通方法。

抽象类是被子类继承,接口是被类实现。

接口与类只有实现,可以单实现,也可以多实现。

抽象类只有继承,且只能单继承和多层继承。

6.接口的作用是什么?

对外提供规则的接口,它是一些方法的声明,在不同的地方实现这些接口,可以实现不同的功能。

7.集合类、IO类、线程、网络?

集合:长度可自动扩展,默认长度为10,以1.5倍的速扩展;可以存任何对象,而且只能存对象。


创建线程:

1、继承thread类,重写该类的run方法。

2、实现runnable接口,并重写该接口的run方法。

Io流:

1、字节流,文件字节流,缓冲区字节流,对象流,对象数组。

2、字符流,文件字符流,字符缓冲流,转换流。


任务:

花一个小时,把tank的结构、类搞清楚。


5. 网络协议

技术知识点:

OS1七层参考模型是由ISO组织制定的

TCP\IP四层模型

5种协议

Tcp和udp的区别

Tcp的机制

HTTP:特点、请求响应、头正文、cookie、session

1.OS1七层参考模型是由ISO组织制定的

应用层

表示层

会话层

传输层

网络层

数据链路层

物理层

2.TCP\IP四层模型

应用层

传输层

网络层

物理层

5种协议:TCP、UDP、IP、HTTP、FTP、SMTP

Tcp和udp的区别

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的

UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

传输速度的快与慢,可靠与不可靠,tcp有三次握手、四次挥手,而udp没有

Tcp的机制

三次握手、四次挥手

HTTP特点

1.支持客户/服务器模式。 

2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 

3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 

4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 

5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

请求类型

GET:获取某个资源

POST:向某个地址提交数据

请求响应:其中包括头和正文。

由于http协议是无状态无连接的所有就有了Cookie和Session这种保持用户状态的机制。其本质一样,区别在于Cookie保存在客户端。Session保存在服务器端。

重点难点:

HTTP说清楚。


实际应用:

用了哪些工具去分析了哪些方面。Httpwatch

为接口和性能打下基础。


常见面试题:

1.说下TCP\IP的四层模型?

应用层、传输层、网络层、物理层

2.TCP、UDP、IP、HTTP、FTP、SMTP分别是在哪个层?

TCP、UDP(传输层),IP(网络层),HTTP、FTP、SMTP(应用层)

3. Cookie和session的作用和区别?

Cookie和Session是一种保持用户状态的机制。其本质一样,区别在于Cookie保存在客户端。Session保存在服务器端。


4.请求的类型有哪些?区别?

Get:获取资源 post:提交数据 put:向某个特定地址上传其最新内容

Delete:用于删除请求URL上的某个资源

5.常见进程的端口号?mysql http https oracle ssh sqlserver

mysql 3306 http 80 HTTPS 443 ssh 22 ftp 21 sqlserver1433 Oracle1521

6.使用了哪些工具去分析协议?怎么用的?

在测试过程中,主要使用httpwatch、fiddler 或者浏览器自带的开发者工具去捕获请求,对请求和响应的头和正文进行分析,用其参数进行接口测试。

任务:

花点时间把概念,重点是HTTP的记清楚点。



测试核心技能

1. 测试基础

技术知识点:

概念:


质量模型:ISO9000  CMMI  六西格玛

ISO9000是ISO制定的一个质量标准体系,它制定了管理理念和原则

CMMI是专门针对软件行业制定的质量体系

六西格玛是一个全面质量管理体系,不仅仅是质量提高手段

分类:

类型:功能、可用、兼容、可靠、安全、性能

方法:

黑盒:不考虑代码的逻辑结构和特性,根据需求规格说明书验证程序是否符合它的功能说明。

灰盒:黑白测试的组合。

白盒:针对代码的逻辑结构进行测试。

阶段:单元测试、集成测试、系统测试

手段:

静态:不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。

动态:动态测试方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能

手动、自动化

过程:分析、设计、实现、执行


用例设计:有哪些、使用策略

主要是划分等价类,边界值,正交试验法,流程分析法,错误推测法。在E-shop系统中的搜索框使用等价类和边界值进行测试,划分有效等价类和无效等价类。设计测试用例覆盖有效等价类和无效等价类。对下单、加入购物车、确认订单、结算这些功能使用流程分析法和正交试验法进行测试。最后使用错误推测法补充测试用例。

缺陷:专业名词、属性(项)、生命周期(管理流程)、工具

属性:创建人、指派人、优先级、严重度、操作步骤、期望结果、实际结果bug类型、操作系统、浏览器、bug标题、所属产品、所属模块、所属项目、影响版本、抄送人、相关需求、

相关任务

工具:禅道、bugfree

周期:new-open-fixed(duplicate(重复),rejected(拒收)design(设计如此),postpone(延期))-close (reopen)


重点难点:

项目中设计高质量测试用例


实际应用:

用例设计那些题。


常见面试题:

1.用例设计方法有哪些?

主要是划分等价类,边界值,正交试验法,流程分析法,错误推测法。在E-shop系统中的搜索框使用等价类和边界值进行测试,划分有效等价类和无效等价类。设计测试用例覆盖有效等价类和无效等价类。对选择物品、加入购物车、结算这些功能使用流程分析法和正交试验法进行测试。最后使用错误推测法补充测试用例。

2.你用的缺陷管理(项目管理)工具是什么?怎么用的?

禅道:在禅道上新建测试用例,并执行测试用例,测试用例执行失败,则转BUG,在BUG提交页面上填写相应信息,指派给PM,由他判断是否是BUG,不是则关闭,是就指派给相应的开发人员。开发人员确认是否是BUG,不是则rejected,是则修改完成后指派给PM,PM指派给相应的测试人员进行测试,通过测试则close缺陷,没通过就rejected给PM再次判断缺陷。

任务:


2. 系统测试

技术知识点:

smeoa的项目介绍

项目流程

分析:分析和提取测试需求、编写测试计划

设计:设计测试方案、设计测试用例

实现:搭建测试环境、准备测试数据、实现测试用例

执行:执行测试用例、缺陷管理、回归测试、测试报告


重点难点:

项目流程


实际应用:


常见面试题:

1.你们的smeoa是怎么测试的?

首先,我们对需求规格说明书进行了分析,并提取测试需求,然后我们组长编写了测试计划,对本次测试进行工作分配,进而我编写了测试方案,测试方案体现了我们的测试策略,描述了当前测试我们需要用到哪些技术、方法和工具,然后我们使用了划分等价类,边界值,正交试验法,流程分析法,错误推测法等方法设计了测试用例,然后进行评审,且再次对测试用例进行优化,等版本发布后我们交叉执行我们的用例,并在执行的过程中优化用例,发现的bug提交到禅道上面交给开发进行处理,最后等我们这个测试阶段完成过后生成一个测试报告,来对我们当前的测试工作进行总结,并做一个思考和改进。

2.项目的流程是什么?

首先,我们对需求规格说明书进行了分析,并提取测试需求,然后我们组长编写了测试计划,对本次测试进行工作分配,进而我编写了测试方案,测试方案体现了我们的测试策略,描述了当前测试我们需要用到哪些技术、方法和工具,然后我们使用了划分等价类,边界值,正交试验法,流程分析法,错误推测法等方法设计了测试用例,然后进行评审,且再次对测试用例进行优化,等版本发布后我们交叉执行我们的用例,并在执行的过程中优化用例,发现的bug提交到禅道上面交给开发进行处理,最后等我们这个测试阶段完成过后生成一个测试报告,来对我们当前的测试工作进行总结,并做一个思考和改进。

3.你们的用例设计流程是什么?

分析规格需求说明书,提取测试需求,编写测试计划及测试方案,设计测试用例,通过评审再次优化用例。

4.你们的方案和计划是谁写的,重点是什么?区别是什么?

测试计划是我们组长写的,我写的测试方案,测试计划是管理型文件,方案是技术型方案,测试计划主要关注:人员、进度、组织、资源、测试范围等。而测试方案主要关注:技术、工具。计划主要介绍做什么的,方案主要是讲怎么测试的。

5.禅道是什么使用的?

新建BUG,并指派给PM,由他判断是否是BUG,不是则关闭,是就指派给相应的开发人员。开发人员确认是否是BUG,不是则rejected,是则修改完成后指派给PM,PM指派给相应的测试人员进行测试,通过测试则close缺陷,没通过就rejected给PM再次判断缺陷。

6.项目人员有多少,怎么分配工作的,测试周期是多久?

项目有4个人,每人负责2个模块,测试周期为3个月。

7.测试报告有哪些要点?

在测试报告中有本次测试中每个成员测试用例数,提交的bug数,对其出现bug的原因进行分析,总结本次的测试结果。对本次测试中表现不好的地方提出改进措施。

8.你最得意的bug是什么?最难找到的bug是什么?怎么找到的?

在E—shop系统中,同一个账号在不同的浏览器上登陆成功后能同时在线。做兼容测试的时候忘记在Firefox中忘记退出当前账号,在IE浏览器登陆该账号时并没有给出当前账号已登录的提示,在IE浏览器测试完成后,回到Firefox浏览器中发现当前账号未退出。

9.XX系统中你测试的模块是什么?怎么测的?

日报和个人两个模块,我们当时是分析需求规格说明书,提取测试需求,编写测试计划及测试方案,设计测试用例,并对用例进行评审,再次优化用例,版本发布后交叉执行用例,发现的bug提交到禅道交给开发处理,等本阶段测试完成后编写测试报告

10.如何和开发配合管理缺陷的。

新建BUG,并指派给PM,由他判断是否是BUG,不是则关闭,是就指派给相应的开发人员。开发人员确认是否是BUG,不是则rejected,是则修改完成后指派给PM,PM指派给相应的测试人员进行测试,通过测试则close缺陷,没通过就rejected再次指派给PM再次判断缺陷。


任务:

1. Tinyshop搞上去,或者其他的电商系统。

操作每个模块的功能

把核心功能打个草稿设计用例

准备三个缺陷


3. UI自动化

技术知识点:

UI自动化目的:使用工具或者程序代替人工进行测试,模拟人工难以实现的场景去测试。

原理:坐标定位:按键精灵。图像匹配:sikuli 特征识别:selenium 、QTP

适用范围(场景):冒烟测试、回归测试、兼容测试。

UI自动化工具:sikuli、selenium IDE  RC  WEBDRIVER

Junit、testng:注解、断言

数据驱动:实现测试数据和代码的分离,数据的变化会引起代码执行的变化,以数据为基础驱使自动化执行。

组件化框架:它是用分层的思想实现组件的框架,使代码不受测试类名、方法名的限制更好的实现数据驱动。


重点难点:

数据驱动

组件化框架


实际应用:


常见面试题:

1.自动化测试流程是什么?

分析:技术和工具的调研

设计:设计自动化测试的框架

实现:自动化测试的代码

执行:搭建自动化运行测试环境、自动化测试的数据、运行测试

维护:维护自动化测试的用例和脚本

2.介绍下selenium

Selenium是一款开源免费的基于特征识别的web自动化测试工具,现在有三个版本,1.0,2.0和3.0 。3.0才出来不久,所有主要还是用前两个版本,Selenium 1.0 包含selenium IDE 、selenium Grid、selenium RC 。Selenium 2.0 版本是在1.0版本上新增了一个selenium Webdriver。selenium RC 是1.0版本的核心,但现在主要用selenium Webdriver,Webdriver和RC相比它的API更加丰富,运行速度更快。

3. Webdriver常用API

findElement(查找元素)、sendKeys(输入值)、click(点击)、get(打开网页)、getText(获取文本信息)、clear(清除内容)、by(元素定位)

4.页面元素定位有哪些?

By(Id、cssSelector、xpath、linktext、name、classname、tagname),其中有id和name的时候选择id和name,都没有就选xpath

5. Junit、testng如何结合使用的?

Junit和testng都是测试的一种框架,这两种框架都是对它的注解和断言进行使用,我们对测试的方法加test注解,在测试方法之前加before注解,测试之后加after注解,在测试的方法中使用asserttrue、assertequals等断言。

6.什么是数据驱动?怎么设计框架的?结构是怎样的?

实现测试数据和代码的分离,数据的变化会引起代码执行的变化,以数据为基础驱使自动化执行。框架采用分层的思想,将代码分为工具层(读取Excel文件和解析文件)、动作层(测试中的操作)、测试层(调用动作层,进行断言)、主启动层(启动程序,开始测试)

7.什么阶段做的UI自动化,覆盖率是多少?

一般在冒烟测试和回归测试时使用UI自动化,覆盖率为20%~30%


任务:

2个小时至少把数据驱动的代码搞清楚,能够写出来。


4. 协议的接口功能性测试

技术知识点:

接口测试的作用:不受前端页面影响,直接对服务器进行彻底的针对测试

工具:浏览器自带工具,fiddler、httpwatch。

Java实现的

创建一个类读取Excel文件,实现发送get、post请求,实现保存cookie和正文的响应类,最后在主启动类中实现解析Excel文件并启动测试。

重点难点:


实际应用:


常见面试题:

1.接口测试如何开展的?(流程是什么)

分析:接口(协议)的需求的分析、捕获的工具、接口文档的分析

设计:测试用例、接口测试的框架

实现:框架的代码实现、用例实现

执行:搭建环境、准备数据、执行测试、提交缺陷

2.你做了哪些接口的测试?

对E—shop系统的登录,手机商城的选中物品-加入购物车-结算进行了接口测试。

3.接口测试的意义是什么?

抛开前端页面的影响,直接对服务器进行彻底的针对性测试

4.和UI自动化进行对比?

UI自动化是针对界面的测试,而接口测试是对服务器的测试,其中接口实现的功能不一定在页面能操作。

5.描述拿到的接口文档。

接口文档主要由接口名称、描述、URL、调用方式、传入参数、返回值组成

6.如何使用XX测试工具进行接口测试的?

使用soapUI工具进行接口测试,创建项目命名,创建测试用例集;.创建一条测试用例,右键add step,选择http request,填写地址、参数、请求类型;添加断言;执行测试。

任务:

花1个小时把基于Java的数据驱动的接口自动化理清楚。


5. 协议的接口性能测试

技术知识点:

原理:协议、多线程、真实模拟

分类:基准、负载、压力、配置、稳定性、容量

流程:

分析:性能需求

设计:性能方案、脚本

实现:环境、数据、脚本

执行:执行脚本


工具:loadrunner、jmeter

实现脚本


重点难点:


实际应用:


常见面试题:

1.性能测试的流程?

分析:性能需求

设计:性能方案、脚本

实现:环境、数据、脚本

执行:执行脚本

2.压力测试和负载测试的区别是什么?

压力测试:在一定的负荷条件下,长时间连续运行系统给系统性能造成的影响。

负载测试:在一定的工作负荷下,给系统造成的负荷及系统响应的时间。

3. Jmeter你们的脚本是录制就开始执行吗?

不是,先对脚本进行优化,然后设计场景再进行测试

4.脚本优化的点有哪些?

多账户(参数化)、断言(检查点)、操作间隔(思考时间)、集合点、后置处理器(关联)、事务控制器、循环控制器

5.关注的指标体系是哪些?

TPS:每秒处理事务数;Rt:响应时间;HPS:每秒处理请求数;服务器资源;线程数

6.对XX系统的性能测试,最终发现了什么瓶颈吗?得到了什么结论吗?

Cpu 在多用户同时并发的情况一直处于高负荷运行状态,增加CPU数量后再进行测试。

7.设计了哪些场景。

负载测试:每30秒增加20个用户,且在每个用户级下运行5分钟,直至用户数添加完成,并在最大用户数时运行10分钟后每30秒减少20个用户,且在每个用户级下运行5分钟,直到没有用户运行时结束

压力测试:100个用户同时登录,长时间运行后用户数直接掉0。

任务:

回顾Jmeter,看书。

你可能感兴趣的:(软件测试工程师必掌握的基础要点)