文章目录(PS:觉得分享不错的话请三连支持一下!)
因为测试环境和开发环境是独立分开的。
在我们测试过程中,当接口报错、服务器状态异常时都需要在linux中查看输出日志并将其反馈给开发。
开发提测后的服务都需要在测试环境中进行部署,就涉及一些nginx、mysql配置、shell脚本、java环境搭建等的一些操作学习
jmeter的性能瓶颈不高,在大压力场景下的测试场景中需要多台机器进行分布式的性能测试,这个时候就可能需要在linux中搭建分布式环境进行多台主机、服务器的管理和并行。
1.1 说明
查看文件内容,测试中常用于查看日志;这一定是面试最常问且最应该掌握的命令!
在我们测试过程中,这个命令常常伴随着我们。当测试的项目接口报错时,通常需要在服务器上使用该命令查看错误日志反馈给对应开发!
格式:tail 参数 文件
| 参数 | 说明 |
|---|---|
| -f | 实时读取 (需重点掌握它,其余的参数了解就行) |
| -q | 不显示处理信息 |
| -v | 显示详细的处理信息 |
| -c<数目> | <数目> 显示的字节数 |
| -n<行数> | 显示文件的尾部 n 行内容 |
| –pid=PID | 与-f合用,表示在进程ID,PID死掉之后结束 |
| -q, --quiet, --silent | 从不输出给出文件名的首部 |
| -s, --sleep-interval=S | 与-f合用,表示在每次反复的间隔休眠S秒 |
1.2 示例
例如我们目录下有一个log文件:

1)我们可以使用tail -f csdn.log 来实时读取它

2.如果要查看最后200行的内容并实时读取,则命令为:
tail -200f csdn.log
3.如果不带参数直接跟文件的话:tail csdn.log ,则默认显示的是最后10行的内容
2.1 说明
用于查找文件里符合条件的字符串
语法:grep 参数 '查找字符串' 文件名
| 参数 | 说明 |
|---|---|
| -a | 将binary文件以text文件的方式查找数据 |
| -c | 计算找到‘查找字符串’的次数 |
| -i | 忽略大小写的区别,即把大小写视为相同 |
| -v | 反向选择,即显示出没有‘查找字符串’内容的那一行 |
2.2 示例
1)如果要查询csdn.log文件中的“完成次数:749”文本,可以输入命令:
grep 完成次数:749 csdn.log

2)grep的常用场景并不是用于匹配字符串,二是在查询匹配进程中使用的更多:例如我要看我启动了哪些python进程,则可以输入命令:
ps -ef |grep python

3.1 说明
切换当前目录,很基本的一个命令
语法:cd 绝对/相对路径
3.2 示例
1)比如我们要进入/usr/local这个目录则可以输入命令:cd /usr/local

2)如果此时想进入/usr/src这个目录的话可以输入:
:cd ../src,当然输入:cd /usr/src也是可以的。
3.如果想返回上级目录:可以输入命令:cd ..
4.1 说明
用于查看指定目录下的内容(文件、子目录)的非常基本的命令
语法:ls 参数 路径 (不带路径则全局搜索)
| 参数 | 说明 |
|---|---|
| -l | 列出长数据串,包含文件的属性与权限数据等 |
| -a | 列出全部的文件,连同隐藏文件(开头为.的文件)(需掌握) |
| -d | 仅列出目录本身,而不是列出目录的文件数据 |
| -h | 将文件容量以较易读的方式(GB,kB等)列出来 |
| -R | 连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来 |
4.2 示例
1)查看有哪些文件、文件夹可以输入命令:ls

2)查看文件、文件夹的权限和属性等信息,可以输入命令:ls -l 或ll

3)查看/root/simpleApi(指定目录)下的文件信息,可以输入命令:ls /root/simpleApi/

5.1 说明
用来在指定目录下查找文件
语法:find 路径 参数 操作
| 参数 | 说明 |
|---|---|
| -name test | 查询指定目录下,命名为test的文件 |
| -size +100k | 查询指定目录下,文件大于100K的文件 |
| -ctime n | 查询指定目录下,在过去n天内被修改过的文件 |
5.2 示例
1)查看/root/simpleApi下文件名为test的文件,可以输入命令:
find /root/simpleApi/ -name test.sh

6.1 说明
用来为文件或目录改名、或将文件或目录移入其它位置
语法:mv 参数 文件 新名称/新路径
| 参数 | 说明 |
|---|---|
| -f | 强制移动,如果目标文件已经存在,不会询问而直接覆盖 |
| -i | 若目标文件已经存在,就会询问是否覆盖 |
| -u | 若目标文件已经存在,且比目标文件新,才会更新 |
6.2 示例
1)将e.log文件名称改为t.log,可以输入命令:mv e.log t.log
2)将e.log 文件移动到te/te1文件夹下,可以输入命令:mv e.log te/te1
3)如果te/te1文件夹下存在了e.log,需要询问是否覆盖,可以输入命令:mv -i e.log te/te1

7.1 说明
主要用于复制文件或目录
语法:cp 参数 文件/目录 目标文件/目录
| 参数 | 说明 |
|---|---|
| -a | 将文件的特性一起复制 |
| -p | 连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份 |
| -i | 若目标文件已经存在时,在覆盖时会先询问操作的进行 |
| -r | 递归持续复制,用于目录的复制行为 |
| -u | 目标文件与源文件有差异时才会复制 |
7.2 示例
1)将e.log文件复制到te/te1目录下,可以输入命令:cp e.log te/te1
2)将文件夹test及它下面的内容复制到test1文件夹下,可以输入命令:cp -r test test1
8.1 说明
用于删除一个文件或者目录。
语法:rm 参数 文件名/目录
| 参数 | 说明 |
|---|---|
| -f | 强制删除,忽略不存在的文件,不会出现警告消息 |
| -i | 互动模式,在删除前会询问用户是否操作 |
| -r | 递归删除,最常用于目录删除,慎用!!!(需掌握) |
8.2 示例
1)强制删除当前目录下的te.log文件,可以输入命令:rm -f te.log
2)强制删除文件夹test及其下面的所有内容,可以输入命令:rm -rf te
9.1 说明
用于查看文本文件的内容
语法:cat 参数 文件名
| 参数 | 说明 |
|---|---|
| -n 或 --number | 由 1 开始对所有输出的行数编号。 |
| -b 或 --number-nonblank | 和 -n 相似,只不过对于空白行不编号。 |
| -s 或 --squeeze-blank | 当遇到有连续两行以上的空白行,就代换为一行的空白行。 |
| -v 或 --show-nonprinting | 使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。 |
| -E 或 --show-ends | 在每行结束处显示 $。 |
| -T 或 --show-tabs | 将 TAB 字符显示为 ^I。 |
9.2 示例
1)查看csdn.log文件内容 ,可以输入命令:cat csdn.log
2)查看csdn.log部分内容,可以输入命令:cat csdn.log|less
10.1 说明
文本编辑器,Vim是vi的升级版,常用于编码。但作为测试,往往用vi就足够了
语法:vi/vim 参数 文件名
| 参数 | 说明 |
|---|---|
| i | 在当前光标所在字符的前面,转为输入模式;(需掌握) |
| a | 在当前光标所在字符的后面,转为输入模式; |
| o | 在当前光标所在行的下方,新建一行,并转为输入模式; |
| I | 在当前光标所在行的行首,转为输入模式; |
| A | 在当前光标所在行的行尾,转为输入模式; |
| O | 在当前光标所在行的上方,新建一行,并转为输入模式; |
| 参数 | 说明 |
|---|---|
| :q | 退出 |
| :q! | 不保存退出 |
| :w | 保存 |
| :w! | 强行保存 |
| :wq | 保存退出 |
| :wq! | 强制保存并退出 |
10.2 示例
1)需要在te.log文件中插入文本“abcd”并保存,则操作步骤为:
1.输入命令:vi te.log
2.按:i
3.输入:abcd
4.按:esc
5.输入:wq

6.按下 “回车”,保存成功!
11.1 说明
控制用户对文件的权限的命令
语法:chmod 参数 文件名
对于测试而言无须记住太多,只需知道修改权限的命令即可:(了解就行)
| 参数 | 说明 |
|---|---|
| -r | 赋予读取权限 |
| -w | 赋予写入权限 |
| -x | 赋予执行权限 |
| 777 | 赋予可读、可写、可执行权限 |
11.2 示例
1)赋予te.log读取权限,可以输入命令:chmod -r te.log
12.1 说明
用来列出系统中当前正在运行的那些进程,类似于 windows 的任务管理器。
语法:ps 参数
| 参数 | 说明 |
|---|---|
| -A | 列出所有的进程 (需掌握) |
| -w | 显示加宽可以显示较多的资讯 |
| -au | 显示较详细的资讯 |
| -ef | 查看全格式的全部进程 (需掌握) |
| -aux | 显示所有包含其他使用者的行程 |
12.2 示例
1)列出所有进程,可以输入命令:ps -A

2)查看当前运行中的进程,可以输入命令:ps
3)与grep联用,查询所有包含chrome关键字的进程详细信息,可以输入命令:
ps -ef|grep chrome

13.1 说明
用于删除执行中的程序或工作
语法:kill 参数/信号 进程
| 参数 | 说明 |
|---|---|
| -l | 参数会列出全部的信息名称。 |
| -s | 指定要送出的信息。 |
| 参数 | 说明 |
|---|---|
| 1 (HUP) | 重新加载进程。 |
| 9 (KILL) | 杀死一个进程。(需掌握) |
| 15 (TERM) | 正常停止一个进程。 |
13.2 示例
1)要查询kill的所有信号,可以输入命令:kill -l

2)杀死进程PID为21666的进程,可以输入命令:kill -9 21666
即使你记住了这些命令,在实际操作linux中还是会遇到不少的问题。一定要学会多看报错信息,多思考,多练习才能够熟练运用!
但掌握了这些命令,也已经能够应付大部分测试岗的面试了!
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当