测试的入门与学习篇之一
入门测试需要从头开始
- 一、基础知识框架
- Http协议
- 附加Tip
- ping命令
- 请求行和响应头
- 请求基本类型
- Get请求
- Post请求
- Put请求
- Delete请求
- 状态码
- 二、基础语言知识
- Python
- Unittest
- Doctest
- py.test
- Nose
- 三、软件工具的使用
- EolinkerAPI接口管理
- Selenium自动化测试
- 安装软件
- 八大定位
- 定位产生的问题
- selenium关闭窗口close与quit
- 模拟鼠标悬浮
- 控制滚动条
- 结尾
- 学习资源
一、基础知识框架
首先,作为一个刚入门的小白,先跟大家一下分享我的个人学习经历,其实刚开始只是对于测试这个行业或者是说有关测试这一份工作有着一部分的了解,也并不完全了解。
最开始在学校期间由于这门课程并不是主要的专业课,老师更多的也只是普及了一些理论知识,基本关于测试也并不深入讲解,对于软件有使用过几次Jmeter,学习了一些基础操作。
所以…基本可以忽略不计,让我们从头开始学习吧!
Http协议
入门测试那么一定要先了解Http协议,http协议,就是浏览器和服务器之间进行“沟通”的一种规范。
附加Tip
ping命令
ping本机IP:例如本机IP地址为:172.0.0.1,则执行命令 Ping172.0.0.1 -》不通则表明网卡安装或配置有问题。
ping网关IP:例如网关IP为:172.17.0.254,则执行命令 Ping 172.17.0.254 -》不通则表明网关有问题。
ping远程IP:例如IP为www.baidu.com,则执行命令 ping www.baidu.com -》测试本机能否正常访问Internet。
请求行和响应头
首先看看Http请求消息(就是浏览器丢给服务器的):
一个http请求代表客户端浏览器向服务器发送的数据。一个完整的http请求消息,包含一个请求行,若干个消息头(请求头),换行,实体内容。
请求行:描述客户端的请求方式、请求资源的名称、http协议的版本号。 例如: GET/BOOK/JAVA.HTML HTTP/1.1
请求头(消息头)包含(客户机请求的服务器主机名,客户机的环境信息等):
Accept:用于告诉服务器,客户机支持的数据类型 (例如:Accept:text/html,image/*)
Accept-Charset:用于告诉服务器,客户机采用的编码格式
Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式
Accept-Language:客户机语言环境
Host:客户机通过这个服务器,想访问的主机名
If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间
Referer:客户机通过这个头告诉服务器,它(客户端)是从哪个资源来访问服务器的(防盗链)
User-Agent:客户机通过这个头告诉服务器,客户机的软件环境(操作系统,浏览器版本等)
Cookie:客户机通过这个头,将Coockie信息带给服务器
Connection:告诉服务器,请求完成后,是否保持连接
Date:告诉服务器,当前请求的时间
实体内容:
就是指浏览器端通过http协议发送给服务器的实体数据。例如:name=dylan&id=110
(get请求时,通过url传给服务器的值。post请求时,通过表单发送给服务器的值)
再看看HTTP响应消息(服务器返回给浏览器的):
一个http响应代表服务器端向客户端回送的数据,它包括:
一个状态行,若干个消息头,以及实体内容
响应头(消息头)包含:
Location:这个头配合302状态吗,用于告诉客户端找谁
Server:服务器通过这个头,告诉浏览器服务器的类型
Content-Encoding:告诉浏览器,服务器的数据压缩格式
Content-Length:告诉浏览器,回送数据的长度
Content-Type:告诉浏览器,回送数据的类型
Last-Modified:告诉浏览器当前资源缓存时间
Refresh:告诉浏览器,隔多长时间刷新
Content-Disposition:告诉浏览器以下载的方式打开数据。例如: context.Response.AddHeader(“Content-Disposition”,“attachment:filename=aa.jpg”); context.Response.WriteFile(“aa.jpg”);
Transfer-Encoding:告诉浏览器,传送数据的编码格式
ETag:缓存相关的头(可以做到实时更新)
Expries:告诉浏览器回送的资源缓存多长时间。如果是-1或者0,表示不缓存
Cache-Control:控制浏览器不要缓存数据 no-cache
Pragma:控制浏览器不要缓存数据 no-cache
Connection:响应完成后,是否断开连接。 close/Keep-Alive
Date:告诉浏览器,服务器响应时间
状态行: 例如: HTTP/1.1 200 OK (协议的版本号是1.1 响应状态码为200 响应结果为 OK)
实体内容(实体头):响应包含浏览器能够解析的静态内容,例如:html,纯文本,图片等等信息
请求基本类型
http中有多种的请求类型,但常用的为四种,所有可以主要了解这几种之后有需要再了解其他的,主要为get/post/delete/put,分别为查、增、删、改。
Get请求
get(查):通过请求URI得到资源,一般用于获取/查询资源信息。
Post请求
post(增):用于向服务器提交新的内容,一般用于更新资源信息。<传输实体文本>
Put请求
put(改):用来传输文件,就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存在请求URI指定的位置。
Delete请求
delete(删):指明客户端想让服务器删掉某个资源,与put方法相反,按URI删除指定资源。
状态码
状态码是当你发送了请求后,浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
一般状态码为:
1xx:用于指定客户端相应的某些动作
2xx:表示成功处理了请求的状态码
3xx:表示要完成请求,需要进一步操作。通常,这些状态码用来重定向。
4xx:这个开头的状态码表示请求可能错误,妨碍了服务器的处理。
5xx:表示服务器在尝试处理请求时发生内部错误。
二、基础语言知识
Python
首先,我个人学习的是基于Python语言的,因为在各种丰富的语言中,目前相对来讲是Python更加适合入门测试。更加容易学习,门槛相对较低。从定义来讲:Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。
我们需要先了解几种常见的测试框架
Unittest
unittest是Python内置的标准类库。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很相似。
通过继承unittest.TestCase来创建一个测试用例。
Doctest
doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果.即使从没接触过 doctest,我们也可以从这个名字中窥到一丝端倪。“它看起来就像代码里的文档字符串(docstring)一样” 如果你这么想的话,就已经对了一半了。
py.test
py.test是unittest的替代工具。
尽管它是一个功能丰富、灵活的测试框架,但是它的语法很简单。创建一个单元测试就像编写一个模块一样。相比unittest,实现相同的测试功能,py.test做的事情更少。
Nose
Nose是对unittest的扩展,使得python的测试更加简单。nose自动发现测试代码并执行,nose提供了大量的插件,比如测试输出的xUnitcompatible,覆盖报表等等。
nose的详细文档: https://nose.readthedocs.org/en/latest/
注意:nose本身是支持python3的,但是很多它的插件不支持。
tip:还有其他的测试框架也就不再过多列举了。
三、软件工具的使用
学习了理论基础,我们就需要运用实践来检验一些操作是否能够执行并达到我们的目的。
EolinkerAPI接口管理
最开始接触的是接口的测试,那么就需要了解接口管理工具,比如我所接触的Eolinker。
Eolinker是国内企业级IT研发管理解决方案服务品牌,在线API接口管理服务供应商,致力于满足各行业客户在不同应用环境中对研发管理全生命周期的个性化需求,提供API开发管理(AMS)、开发团队协作、自动化测试、网关(AGW)以及监控(AMT)等服务
分为网页端和客户端。个人来讲网页端更加方便于使用,主要区别在于,客户端不支持打开多个页面,网页端可以打开多个页面。但使用网页端测试也有弊端,如果需要测试本地的话就需要安装插件EOLINKER API Studio Plugins,将插件下载后在浏览器打开已解压的拓展程序添加上就可以了。
例如:Chrome浏览器
准备就绪后我们就可以使用Eolinker进行接口测试。(这里使用的是网页端)
打开网页端,需要注册个人账号但也支持第三方账号登录:
登录后我们将看到主要的功能栏:
在API管理与自动化测试中,API自动化测试用来存放测试用例,API研发管理用来存放测试文档:
将测试文档编写后,我们在编写测试用例时可以直接调用编写好的文档来编写用例,更加方便快捷。
在测试中更重要的一点那就是测试环境,在Eolinker中我们可以在测试用例的左侧功能栏的公共资源管理下找到测试环境这个选项,可以自行编辑你的测试环境:
接下来就取决于测试文档和测试用例的编写,在测试了一个用例时,我们的请求会返回一个结果,包含着非常多的信息,比如请求地址,请求头部,返回头部,实际的状态码,和你请求返回的实际内容等等。
Selenium自动化测试
第二个主要学习的就是Selenium+Python自动化测试,从定义上来讲Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。
主要分享一些我遇到的基本问题。
安装软件
selenium的安装相对简单便捷,具体安装可参照这篇博客:https://blog.csdn.net/qq_40677676/article/details/84669757
八大定位
定位是使用selenium很重要的部分,主要定位有八种定位方式:
id定位: find_element_by_id()
name定位: find_element_by_name()
class定位:find_element_by_class_name()
tag定位:find_element_by_tag_name()
link定位:find_element_by_link_text()
partial_link定位:find_element_by_partial_link_text()
CSS定位:find_element_by_css_selector()
xpath定位:find_element_by_xpath()
在我个人看来,xpath定位是非常方便使用,但也有弊端,如果在一个自动化测试项目中过多的去使用xpath定位会导致整个项目的运行速度减慢,所以使用xpath的使用需要权衡利弊,不能使用过多。
定位产生的问题
在定位过程中,偶尔会出现某个元素定位不到或者无法点击等各种情况,大概罗列一些情况:
selenium关闭窗口close与quit
close:关闭当前浏览器打开的第一个窗口
quit:退出驱动并关闭所有关联的窗口
或者你需要关闭的不是当前的第一个窗口,那么就需要跳转窗口再进行关闭;
例如:获取当前全部页面,打印全部页面,跳转到第二个页面,关闭页面
print(driver.window_handles)
print(driver.current_window_handle)
driver.switch_to_window(driver.window_handles[1])
driver.close
模拟鼠标悬浮
#导入Actionchains
from selenium.webdriver import Actionchains
#定位元素
move = driver.find_element_by_.......
#模拟鼠标悬停
Actionchains(driver).move_to_element(move).perform()
控制滚动条
使用Chrome浏览器应用有效
#使用js脚本拖动到指定地方
target = driver.find_element_by_id("id_keee")
driver.execute_script("arguments[0].scrolllntoView());"target)
结尾
其实还有很多内容没有讲,比如:
Jmeter测试工具,编写case时使用po模型,断言的使用,代码的简洁性封装,大量case的编写,unittest容器的使用,利用GitHub进行本地代码和仓库代码的使用,postman测试工具的使用,jenkins搭建持续集成环境的使用等等非常多的知识。
其实可能在一些人看来测试这个工作或者行业 没什么发展或者说没有什么上升空间,但其实每个工作不是看工作本身,而是看做这份工作的人,不同的心态决定不一样的结果。
定好目标,找准方向,认真且有耐心的去学习。
学习资源
网站:
博客园:https://www.cnblogs.com/
51testing:http://bbs.51testing.com/forum.php
简书:https://www.jianshu.com/p/b3QtRo
慕课网:https://www.imooc.com/
哔哩哔哩:https://www.bilibili.com/
当然还有CSDN自身的大平台
学习资源来源采集:
来源一:https://www.cnblogs.com/haiyan123/p/7777924.html
来源二:https://www.cnblogs.com/ceshi2016/p/9110695.html
测试的入门与学习篇之一相关推荐
- 想学测试如何入门和学习软件测试?今天我就好好给你唠唠
我根据薪资的不同,划分成以下几个阶段具体说一下: 月薪5-9k:从零基础入门到能够找到工作 月薪15-25k:测试在职搞定性能测试和自动化测试 年薪30W+:搞定测试开发,进入一线大厂 第一个阶段:月 ...
- Python语言入门这一篇就够了-学习笔记(十二万字)
Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...
- 零基础入门深度学习的五篇经典教程
零基础入门深度学习>系列文章旨在讲帮助爱编程的你从零基础达到入门级水平.零基础意味着你不需要太多的数学知识,只要会写程序就行了,没错,这是专门为程序员写的文章.虽然文中会有很多公式你也许看不懂, ...
- Python学习---入门导学篇
Python学习---入门导学篇 Python的特点 Python受人喜欢的原因 Python的缺点 Python能做什么? Python基础语法 Python的特点 1.Python是一门编程语言, ...
- 强化学习入门这一篇就够了!!!万字长文
强化学习 强化学习入门这一篇就够了万字长文带你明明白白学习强化学习... 强化学习入门这一篇就够了 强化学习 前言 一.概率统计知识回顾 1.1 随机变量和观测值 1.2 概率密度函数 1.3 期望 ...
- [网络安全学习篇9]:渗透测试(千峰网络安全视频笔记 9 day)
引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足:对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以 ...
- 国产版Jetson Nano学习篇2—详细讲解Jetson Nano的开发环境配置和其 Ubuntu 18.04系统的操作,入门必看
目录 前言 1.开发环境配置 1.1联网 1.2系统汉化和安装中文输入法 1.2.1系统汉化(按需求选择) 1.2.2安装中文输入法 1.3更换关屏设置 1.4更新源和部分软件(仅供参考) 2.Pyt ...
- 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录
目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历) ...
- 新手入门深度学习 | 第六篇:TensorFlow2 回调极速入门
作者:K同学啊 本文选自:<小白入门深度学习> 配套实例教程:<深度学习100例> 文章目录 什么是 Tensorflow 回调? 如何使用回调? 如何设置早停? Lambda ...
最新文章
- Java中各种集合特点总结
- 华为全面屏鸿蒙,华为P50pro最新确认:麒麟1020+立体全面屏+鸿蒙系统,这才是华为...
- [jQuery]点击某元素之外触发事件
- 【手把手教学】基于Maven构建方式使用Mybatis generator自动生成
- Mac-安装Homebrew报错error: could not lock config file .git/config:
- 基于深度学习的磁环表面缺陷检测算法
- mysql执行计划查看_查看Mysql执行计划
- 前端_网页编程 Form表单与模板引擎(上)
- 后台接收数组_腾讯C++后台开发面试笔试知识点参考笔记
- 大家一般用什么工具测试HTTP和json接口?
- 厂商占用mac地址段多少排名
- 数据结构:二维ST表
- RLS算法Matlab实现
- 【高数】数学符号及读法大全and数学运算符号及含义
- 线性代数、微积分学习与回顾
- 嵌入式系统安全实验-下载Linux内核源代码生成内核映像
- linux创建777权限的文件,Linux文件夹权限777,无法创建文件
- date_histogram
- 洪灾面前,能抗衡的很少,但能做的很少
- 设计师一定要知道这5个免费样机素材网