《课件-nginx模块的测试方法与程序测试经验.pptx》由会员分享,可在线阅读,更多相关《课件-nginx模块的测试方法与程序测试经验.pptx(39页珍藏版)》请在三一办公上搜索。
1、1,Nginx模块的测试方法与程序测试经验,服务器平台 李子,2010年5月5日,2,服务器平台 李子,概要,单元测试nginx-testperl,单元测试,4,2010年5月5日,单元测试&roadmap,什么是单元测试单元测试重要性我们的借口单元测试内容Mock对象怎么成为好的单元测试,5,2010年5月5日,什么是单元测试,定义开发者编写的一小段代码,用于检查被测试代码的一个很小的、很明确的功能是否正确目的证明某段代码的行为是否与开发者所期望的一致,6,2010年5月5日,不写测试的借口,测试太花时间了在编写代码时,你在哪些地方花费了更多时间?在项目快要结束时才做单元测试,立即测试与延后
2、测试的比较,7,2010年5月5日,不写单元测试的借口,还认为没时间写单元测试对于所编写的代码,在调试上花了多少时间?你觉得是正确的代码,但却存在重大bug,你花多少时间在重新确认这些代码上面?对于别人报告的一个bug,你花多少时间 才找到导致这个bug的源码位置?,8,2010年5月5日,不写单元测试的借口,单元测试运行时间太长将费时间的测试与其它测试分开来费时测试可以每天一次或几天一次运行很快的测试可以经常运行测试代码并不是我的工作工作完成并不意味着编码结束增加对自己代码的自信会不会让测试人员没事可干?,9,2010年5月5日,需要测试的内容,Right-BICEPRight结果是否正确B
3、边界条件I反向关联C交叉检查E强制错误条件的发生P性能要求,10,2010年5月5日,需要测试的内容,Right结果是否正确确认代码要做的与期望是否一致重视测试数据,出错时,先检查数据2-3次,11,2010年5月5日,需要测试的内容,B边界条件Conformance(一致性)Ordering(顺序性)Range(区间性)Referendce(依赖性)Existence(存在性)Cardinatity(基数性)Time(相对或者绝对的时间性),correct,12,2010年5月5日,需要测试的内容,I反向关联使用反向的逻辑来验证他们如:计算平方根,将结果平方后来验证向容器增加数据,验证数据是
4、否存在于容器中尽可能使用不同的原理来反向测试避免两个函数出现相同的bug,13,2010年5月5日,需要测试的内容,C交叉检查使用未采取方法来验证采纳方法的正确性使用本身的不同部分来数据来检验如:总数=已完成+未完成E强制产生错误条件 如:磁盘满,断网E性能特性可以粗糙测试来保证性能曲线的稳定性如:改前为1s,改后是5s,14,2010年5月5日,Mock对象,使用场景某个方法依赖于其他一些难以操控的东西,如网络等简单替换 简单替换函数如:gettime(),15,2010年5月5日,Mock对象,Mock对象使用一个接口来描述这个对象为产品代码实现这个接口以测试为目的,在mock对象中实现这
5、个接口,16,2010年5月5日,优秀的测试,A-TRIP自动化(Automatic)彻底的(Thorough)可重复的(Repeatable)独立的(Independent)专业的(Professional),17,2010年5月5日,优秀的测试,自动化(Automatic)调用测试自动化检查结果自动化彻底的(Thorough)测试了所有可能会出问题的情况可重复的(Repeatable)独立于其它测试,独立于周围环境能以任意顺序执行,且产生相同结果,18,2010年5月5日,优秀的测试,独立的(Independent)简洁而精炼一次只测试一样东西专业的(Professional)不要为了测试
6、去测试,不可能出现问题的情况就不需要去测试了,nginx-test,20,2010年5月5日,nginx-test&roadmap,能做什么执行流程有何优势有何不足如何测试,21,2010年5月5日,nginx-test,能做什么主要是针对功能测试测试执行流程,22,nginx-test,优势 独立性依赖于强大的perl(特别是CPAN)清晰的测试结果可扩展性强不足无法针对单元测试进行测试无法针对性能进行测试目前提供针对nginx的库函数较少,23,2010年5月5日,nginx-test,如何使用函数库Perl库:Test:Morehttp:/search.cpan.org/mschwern
7、/Test-Simple-0.94/lib/Test/More.pm like、unlike、ok、is like($got,qr/expected/,$test_name);ok(foo(),$test_name);is(foo(42),23,$test_name);,24,2010年5月5日,nginx-test,如何使用函数库nginx-test 函数库 Plan、run、stop、write_file、write_file_expand、http_get()、http_head()、http().,25,2010年5月5日,nginx-test,如何使用准备测试数据:配置文件,数据文件
8、从脚本文件中输出拷贝到指定地方,26,2010年5月5日,nginx-test,如何使用编写用例代码like(http_get(foo.html),qr/partten/,comment)执行设置环境变量:TEST_NGINX_BINARY执行测试脚本,perl,28,2010年5月5日,Perl简介,Perl是什么Practical Extraction and Report Language 作者:Larry wall具有高级语言(如C)的强大能力和灵活性。脚本语言,解释执行,并具有脚本语言所有功能Perl像C一样强大,像awk、sed等脚本描述语言一样方便。,29,2010年5月5日,P
9、erl基本语法,变量定义以$开头,如:$num=1;数组定义以开头,如:array=1,2,3;调用数组元素,如:$array1字符串Perl 中字符串的未尾并不含有隐含的NULL字符,NULL字符可以出现在串的任何位置。,30,2010年5月5日,Perl基本语法,单引号与双引号字符串单引号字符串没有变量替换 单引号字符串不支持转义字符单引号字符串可以跨多行字符串连接连接:.(注意与+的区别)重复:x 如:“t”x 5,31,Perl基本语法,文件读写 打开、关闭文件 open(filevar,filename)close(filevar)文件访问模式:读、写和添加 Open(FILE,”a
10、a.txt”)Open(FILE,”aa.txt”)读文件$line=写文件print FILE(“abc”),32,Perl基本语法,命令行参数 命令行参数存放在ARGV变量里面$ARGV为参数个数打开管道 Open(FILE,”|ls”)Open(FILE,”ls|”),33,Perl基本语法,模式匹配以两个反斜线包含:/pattern/匹配操作符:=、!如:$foo=“abcd”$foo=/a/字符”|”指定两个或多个选择来匹配替换操作符:s/pattern/replacement,34,Perl基本语法,子程序子程序可以出现在程序的任意地方:sub subname statements
11、;返回值:默认为最后一条语句的值,也可以通过 return 来返回值 参数传递:Sub sub1 my($var1,$var2)=_;,35,Perl基本语法,子程序预定义子程序:BEGIN:启动时调用 AUTOLOAD:找不到子程序时调用 END:结束时调用,36,Perl基本语法,面向对象创建类:创建名为foo.pm的包文件最后一行添加:”1;”定义包:package foo;构造函数:new();sub new()my$self=;bless$self;return$self;,37,Perl基本语法,面向对象创建类:析构函数:sub DESTORY()方法:静态方法与虚方法静态方法第一个参数为类名,虚方法第一个参数为对象的引用方法的输出引用包:Use foo;,38,再看nginx-test,Nginx-testlib/Test/Nginx.pm,