自动化测试代码编写规范.doc_第1页
自动化测试代码编写规范.doc_第2页
自动化测试代码编写规范.doc_第3页
自动化测试代码编写规范.doc_第4页
自动化测试代码编写规范.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

自动化测试代码编写规范1 概述一般WEB工程都是以Java API(绝大部分功能都是以接口形式提供的),实现后台的自动化测试是一个长期工程,间隙期,可能会有多位测试人员参与编写工作,因各人语言熟练度和代码编写的风格不同,为了保证所有测试用例的统一,也为了后期的维护和传承,故在此拟定一个自动化测试代码规范的初稿,后期再由相关人员补充!说明:1, 本文主要描述的是自动化测试代码方面的约束,关于整个自动化测试的其它部分(如怎样测试EMA等)另起一篇文档。 2,MAS/EMA/Foffice等,因为所用架构等原因,与传统的接口形式有点区别;2 示例2.1 测试代码示例/* * 用例编号:ST-EMA-WEB-SYSTEMMANAGE-USER-ADD-001 * 测试内容:新增用户 * 后台接口:addUser1 * 说明:1,首先要初始化数据库表; * 2, * return 0:失败, 1:成功, 2:异常 * */public static String ST_EMA_WEB_SYSTEMMANAGE_USER_ADD_001()String caseNum = ST-EMA-WEB-SYSTEMMANAGE-USER-ADD-001;try/ 初始化数据库try/ 初始化表tbl_user_role、tbl_user_extend和tbl_userString sqlInit1=delete from tbl_user_role where user_id =USERADD001;String sqlInit2 = delete from tbl_user_extend where member_id=(select member_id from tbl_user where user_id =USERADD001); String sqlInit3=delete from tbl_user where user_id =USERADD001;MysqlJDBC.updateSQL1(url, userName, passWord, sqlInit1);MysqlJDBC.updateSQL1(url, userName, passWord, sqlInit2);MysqlJDBC.updateSQL1(url, userName, passWord, sqlInit3);catch(SQLException ex)System.out.println(数据库数据初始化异常!);ex.printStackTrace();System.out.println(初始化数据库!);/用户登录HttpClient client = new HttpClient(); /登录的服务器及提交的方法PostMethod post = new PostMethod(53:9997/Ema0814/login.do?dispatch=loginCheck); / MD5加密方法MD5 m = new MD5(); System.out.println(m.getMD5ofStr(admin111);NameValuePair username = new NameValuePair(username,admin);NameValuePair password = new NameValuePair(password,m.getMD5ofStr(admin111);NameValuePair validatecode = new NameValuePair(validatecode,1234);NameValuePair organizationId = new NameValuePair(organizationId,defaultema);NameValuePair memberId = new NameValuePair(memberId,2222);post.setRequestBody(new NameValuePair username,password,validatecode,organizationId,memberId); / 使用POST方式提交数据HttpMethod methodLogin = post;System.out.println(methodLogin: + client.executeMethod(methodLogin);System.out.println(methodLogin.getStatusLine();String responseLogin =new String(methodLogin.getResponseBodyAsString().getBytes(gb2312);System.out.println(responseLogin: + responseLogin);System.out.println();/ 新增用户PostMethod post2 = new PostMethod(53:9997/Ema0814/user.do?dispatch=addUser1);NameValuePair fhUserId = new NameValuePair(fhUserId,USERADD001);NameValuePair fhUserPass = new NameValuePair(fhUserPass,password); NameValuePair fhUserStatus = new NameValuePair(fhUserStatus,1); NameValuePair fhUserName = new NameValuePair(fhUserName,zhouyong); NameValuePair fhMail = new NameValuePair(fhMail,); NameValuePair fhJob = new NameValuePair(fhJob,fhjob); NameValuePair fhTelephoneNumber = new NameValuePair(fhTelephoneNumber,02585222222);NameValuePair fhFacsimileTelephoneNumber = new NameValuePair(fhFacsimileTelephoneNumber,02585222222);NameValuePair fhPostalCode = new NameValuePair(fhPostalCode,224700);NameValuePair fhPostalAddress = new NameValuePair(fhPostalAddress,通讯地址);NameValuePair fhSt = new NameValuePair(fhSt,江苏省);NameValuePair fhL = new NameValuePair(fhL,南京市);NameValuePair fhSex = new NameValuePair(fhSex,1);NameValuePair fhBirth = new NameValuePair(fhBirth,1983-12-24);NameValuePair fhHomeAddress = new NameValuePair(fhHomeAddress,家庭地址);NameValuePair fhHomePhone = new NameValuePair(fhHomePhone,05156268818); NameValuePair fhManager = new NameValuePair(fhManager,); NameValuePair fhIdCard = new NameValuePair(fhIdCard;NameValuePair fhSmsLimit = new NameValuePair(fhSmsLimit,100); NameValuePair displayFlag = new NameValuePair(displayFlag,1);NameValuePair fhStartIP = new NameValuePair(fhStartIP,);NameValuePair fhEndIP = new NameValuePair(fhEndIP,01); NameValuePair extension = new NameValuePair(extension,888);NameValuePair fhUserConfirmPass = new NameValuePair(fhUserConfirmPass,password);NameValuePair fhComTel = new NameValuePair(fhComTel,02585222222);NameValuePair fhMobile = new NameValuePair(fhMobile;NameValuePair fhRoleUsedStr = new NameValuePair(fhRoleUsedStr,2);NameValuePair fhGroupIdStr = new NameValuePair(fhGroupIdStr,anaxa0aia7alalafasawaga8aeaqao);NameValuePair diskSizelimit = new NameValuePair(diskSizelimit,200);NameValuePair fhOName = new NameValuePair(fhOName,defaultema);NameValuePair oaproduct = new NameValuePair(oaproduct,);NameValuePair mailproduct = new NameValuePair(mailproduct,);NameValuePair phonetype = new NameValuePair(phonetype,);NameValuePair department = new NameValuePair(department,);NameValuePair qq = new NameValuePair(qq,110143675);NameValuePair msn = new NameValuePair(msn,);NameValuePair nickName = new NameValuePair(nickName,称ni);NameValuePair enCompanyName = new NameValuePair(enCompanyName,公司名);NameValuePair companyAddress = new NameValuePair(companyAddress,公司地址);NameValuePair mobile2 = new NameValuePair(mobile2;NameValuePair fieldS = new NameValuePair(fieldS,);post2.setRequestBody(new NameValuePair fhUserId,fhUserPass,fhUserStatus,fhUserName,fhMail,fhJob,fhTelephoneNumber,fhFacsimileTelephoneNumber,fhPostalCode,fhPostalAddress,fhSt,fhL,fhSex,fhBirth,fhHomeAddress,fhHomePhone,fhManager,fhIdCard,fhSmsLimit,displayFlag,fhStartIP,fhEndIP,extension,fhUserConfirmPass,fhComTel,fhMobile,fhRoleUsedStr,fhGroupIdStr,diskSizelimit,fhOName,oaproduct,mailproduct,phonetype,department,qq,msn,nickName,enCompanyName,companyAddress,mobile2,fieldS);HttpMethod method = post2;/使用POST方式提交数据System.out.println(method: + client.executeMethod(method); / 打印服务器返回的状态System.out.println(method.getStatusLine(); / 打印结果页面String response =new String(method.getResponseBodyAsString().getBytes(gb2312); / 打印返回的信息System.out.println(response: + response);method.releaseConnection();methodLogin.releaseConnection(); /检查结果(数据库)String resultSql01 = select * from tbl_user t where t.user_id = USERADD001;String resultSql02 = select * from tbl_user_extend t where t.member_id=(select member_id from tbl_user t where t.user_id = USERADD001);String resultSql03 = select * from tbl_user_role t where t.user_id = USERADD001;int result01 = MysqlJDBC.querySQL2(url, userName, passWord, resultSql01);int result02 = MysqlJDBC.querySQL2(url, userName, passWord, resultSql02);int result03 = MysqlJDBC.querySQL2(url, userName, passWord, resultSql03);if(1=result01 & 1=result02 & 1=result03)STUtil.writeResult(caseNum,true,pass);return PASS;elsedetail = Fail!;STUtil.writeResult(caseNum, false, detail);return FAILED;catch(Exception ex)detail = 不可预期的异常 + ex.getMessage();STUtil.writeResult(caseNum, false, detail);return Exception;注:所有传入的参数都要必须加上注释;Tomcat后台返回结果:初始化数据库! BBAD8D72C1FAC1D081727158807A8798methodLogin: 200HTTP/1.1 200 OK2009-9-21 18:17:53 mons.httpclient.HttpMethodBase getResponseBody警告: Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended.responseLogin: 00成功method: 200HTTP/1.1 200 OK2009-9-21 18:17:53 mons.httpclient.HttpMethodBase getResponseBody警告: Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended.response: add200新增成功!WEB前台页面返回结果:3 规约请遵循以下原则:1、 一个方法尽可以只测试一个用例,所有的方法命名均为test_用例名称;2、 尽量做到一个功能特性只有一个class测试类,类的名称就以test_特性名称命名;3、 为了便于后期的扩展,请使用返回值方式,不要使用void,返回值约束 0:失败,1:成功,2:异常(目前就需要这三种);/返回值1:成功private static final String PASS = 1;/返回值0:失败private static final String FAILED = 0;/返回值2:异常private static final String Exception = 2;4、 最终所有的方法都需要以jar文件的形式提供,必须要做到脱离IDE运行,提供的测试方法都是静态public方法,这样第三方就可以直接调用进行测试了;我们可以直接通过SVN来获取原代码,不管是jar包还是原代码,我们都要坚持代码(用例)独立原则;public static 方法名()/ 代码;5、 每个特性中所有方法的执行结果都需要记录到同一个文件中,不管成功、失败还是异常,具体的文件格式,如:用例编号.result = 执行结果(pass/fail)用例编号.detail = 具体的返回值、异常信息等,如果没有返回值,则填写pass/fail;if(100 = 100)STUtil.writeResult(caseNum,true,pass);return PASS;elsedetail = Fail,返回结果错误!;STUtil.writeResult(caseNum, false, detail);return FAILED; 6、 结果文件中不能包含一个用例有两个结果记录的情况;如使用JSP页面的方式调用接口后,又使用main函数调用接口,这样就会导致一个用例有两个结果记录;7、需要处理好单点故障,即:不要因为某个用例执行不通过,而导致其他用例无法测,在测试代码中需要做好异常处理工作;建议:在每个接口最后面加个Exception捕捉异常;如果有些语句即使程序异常了也必须执行,那么就需要加上finally语句;try/执行代码catch(MASException ex)/捕捉MAS/EMA等异常catch(Exception ex)/捕捉所有异常finally/不管程序抛不抛异常,都要执行finally中的代码;8、 每个测试方法中都需要有注释(具体注释格式请参考前面的示例),包括:覆盖用的用例编号、用例基本描述信息,返回值描述、测试要点等;要求:关键代码需要添加注释,便于后续维护人员读懂代码;格式一: 格式二:/* * 注释内容 / 注释单行内容 * */9、 每个方法的注释请加上作者名称,如果整个类是由一个人完成的,则只需在类文件中加上作者即可;10、有变量都要参数化;如用例编号、提求信息等;目的:方便维护;建议:将一些经常使用且多次重复的常量用变量来代替,如方法名:public static String ST_CONSOLE_SEC_FACE_DB_Area_Insert_001()String caseNum = ST-CONSOLE-SEC-FACE-CACHE-ATTE-001;boolean strReturn = true;if(true = strReturn)STUtil.writeResult(caseNum,true,pass);return PASS; 11、代码中不能有println语句,应使用统一定义的打印函数;如错误:System.out.println(打印信息.);正确:STUtil.prtMsg(打印信息.);12、分界符(如大括号和)应各独占一行并且位于同一列,同时与引用它们的语句对齐。另外,if、for、white等语句中的程序都要采用如下的缩进方式:错误: 正确: if (condition) if (condition) /代码; /代码; 13、较长的语句、表达式或参数(80字符)要分成多行书写,划分的新行要进行适当的缩进,使排版整齐、语句可读;14、不允许一行语句中写多条代码,即一行只写一句代码;15、if、for、while等语句自占一行,且不管其执行语句有多少都要加括号;错误: if (condition)System.out.println(只有一行代码的写法);正确: if (condition) System.out.println(只有一行代码的写法);16、当判断一个字符、字符串、数组或列表是否为空或等于某个值时,强烈建议将null或常量放在表达式的前面;目的:(当变量为空时)这个做就可以有效避免程序出现异常;错误:String str = valueOfString;if(strValue = null | strValue = str | intValue = 8)/ 代码;正确:if(null = strValue | str = strValue | 8 = intValue)/ 代码;17、定义变量时:1,变量名要有意义;2,变量名第一个单词全部小写,从第二个单词开始,每个单词的首字母大写;/定义一个登陆用户对象LoginImpl login = new LoginImpl();/定义一个字符型变量,作为接收(对象姓名)返回值String loginName = login.getLo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论