由于项目中webui测试的需要,是用testng+selenium的方式,其中遇到过几个问题,记录下,方便以后查看

1.重复运行多次case

因为是selenium,所以有的时候需要运行多次,方法是写一个Retry的类,继承testng的retry类就可以。

public class Retry implements IRetryAnalyzer {
private int retryCount = 0;
private int maxRetryCount = 3; public boolean retry(ITestResult result) { if (retryCount < maxRetryCount) {
retryCount++;
System.out.println(String.format("test failed!try %d time!",retryCount+1));
return true;
}
return false;
}
运行的时候就在case上加上
@Test(retryAnalyzer=Retry.class)
就可以拉

2.自定义annotions

虽然testng自带有很多注释,很好用,但是在项目中,组长要求在每个case前面能够描述一下这个case的作用,以后当case失败的时候,可以输出这个case的作用和失败原因,要外人不看代码也可以看的懂,所以就想自定义一个annotation,添加个decsription属性。

 //UIMessage.java
import static com.myhexin.common.Assert.AssertEquals; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType; import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface UIMessage {
String description();
} //应用
@UIMessage(description = "我是来试试的")@Test(retryAnalyzer=Retry.class)
@Parameters()
public void testDengLuZhangHao(){
/*
* 函数体
*/
}
//如何获取annotation的注释消息,我是用反射来获取的 Method[] methods=Class.forName("core.Member").getDeclaredMethods();
for(Method method:methods)
{
if(method.isAnnotationPresent( UIMessage. class))
{
System. out.println(method.getAnnotation( UIMessage. class).desciption());
}
}

3.selenium截图

目前该截图方式当在remote执行selenium时候,我只是在firefox下成功过,ie打死不行,场景是当case运行失败的时候截图,主要是重写下assert,当断言失败时候,截图,直接上,截图的代码

    public  void screenShot(WebDriver driver,int i)
{
String dir_name="./pic";
if (!(new File(dir_name).isDirectory())) { // 判断是否存在该目录
new File(dir_name).mkdir(); // 如果不存在则新建一个目录
} SimpleDateFormat sdf = new SimpleDateFormat("-HHmmss");
String time = sdf.format(new Date());
WebDriver augmentedDriver = new Augmenter().augment(driver); try {
File screenshot = ((TakesScreenshot)augmentedDriver).getScreenshotAs(OutputType.FILE); // 关键代码,执行屏幕截图,默认会把截图保存到temp目录
FileUtils.copyFile(screenshot, new File(dir_name + File.separator + i+ time + ".png")); // 这里将截图另存到我们需要保存
} catch (IOException e) {
e.printStackTrace();
}
}

java-testng-selenium优化的更多相关文章

  1. maven+selenium+java+testng+jenkins自动化测试

    最近在公司搭建了一套基于maven+selenium+java+testng+jenkins的自动化测试框架,免得以后重写记录下 工程目录 pom.xml <project xmlns=&quo ...

  2. selenium从入门到应用 - 1,环境准备(Java+TestNG+Maven+Selenium)

    本系列所有代码 https://github.com/zhangting85/simpleWebtest 本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境的 ...

  3. 自动化测试框架selenium+java+TestNG——配置篇

    最近来总结下自动化测试 selenium的一些常用框架测试搭配,由简入繁,最简单的就是selenium+java+TestNG了,因为我用的是java,就只是总结下java了. TestNG在线安装: ...

  4. 35 个 Java 代码性能优化总结

    前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...

  5. Java程序性能优化技巧

    Java程序性能优化技巧 多线程.集合.网络编程.内存优化.缓冲..spring.设计模式.软件工程.编程思想 1.生成对象时,合理分配空间和大小new ArrayList(100); 2.优化for ...

  6. Java的性能优化

    http://www.toutiao.com/i6368345864624144897/?tt_from=mobile_qq&utm_campaign=client_share&app ...

  7. Java 代码性能优化总结

    前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...

  8. Java代码性能优化总结

    代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是, ...

  9. 《Java程序性能优化:让你的Java程序更快、更稳定》

    Java程序性能优化:让你的Java程序更快.更稳定, 卓越网更便宜,不错的书吧

  10. [JAVA] java程序性能优化

    一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...

随机推荐

  1. UITableViewCell之微博篇

    微博篇 本应用所涉及的知识点: 1.UITableView 中的cell 2.模型的创建 3.MJExtension第三方框架的使用 需求分析 1.界面分析 微博界面 界面控件分析: 整个页面 1.不 ...

  2. OS X 升级 Yosemite 后,Intellij IDEA 与 VirtualBox 启动失败

    报错: Dyld Error Message: Symbol not found: _CGContextSetAllowsAcceleration Referenced from: /Library/ ...

  3. vc 递归删除非空文件夹

    我觉得这是一个非常不错的递归例子 头文件 #pragma once #include <atlstr.h> #include <io.h> #include <strin ...

  4. QTP 场景恢复– 函数调用

    创建自动化测试是为了实现无人值守下运行,但也给开发人员带来一些问题.假如你离开办公室前启动测试,想要让它通宵运行.然而,由于不可预见的错误,您的测试会在某一点停止,中断了测试结果.因此QTP中引入场景 ...

  5. Flash图表控件FusionCharts如何自定义图表上的垂直线

    什么是垂直分割线 垂直(或条形图中的水平)分隔线是用来帮助用户分隔数据块的.可以被放置在任何两个数据点,即使是不规则的间隔也可以. <chart caption='Monthly Revenue ...

  6. qt+2012+qtcreator 配置

    这个配置搞了我好久,终于搞定了,网上一大堆,总是看不懂,后来自己摸索出来的. 先贴图: 如上图:有两种配置方案: 第一:用vs2012做开发编辑.只要下载和对应插件即可,安装路径不要有空格.安装好之后 ...

  7. dev中如何对combox下拉框设置可消除属性以及ASPxGridView中金额,数量的显示,以及总计、grid中某行值

    下拉框属性关键:IncrementalFilteringMode="StartsWith" DropDownStyle="DropDown" ASPxGridV ...

  8. oracle学习系列之三 (约束)

    主键约束:外键约束:唯一性约束:检查约束:默认值约束 -——————五大约束 一. 主键约束: --创建表的主键约束  create table student (student_id number ...

  9. MFC六大核心机制之一:MFC程序的初始化

    很多做软件开发的人都有一种对事情刨根问底的精神,例如我们一直在用的MFC,很方便,不用学太多原理性的知识就可以做出各种窗口程序,但喜欢钻研的朋友肯定想知道,到底微软帮我们做了些什么,让我们在它的框架下 ...

  10. Oracle笔记 一、oracle的安装、sqlplus的使用

    1. 首先你得安装Oracle数据库服务器端和客户端软件,在安装过程中要注意的是,选择oracle的安装目录,切记不要用中文目录或的带空格的目录. 下载地址: http://hi.baidu.com/ ...