Commit 7a51f2e7 authored by 马博's avatar 马博

ui add

parent 0acd24e4
......@@ -70,18 +70,42 @@
</dependency>
<!-- 依赖reportNg-->
<!--<dependency>-->
<!--<groupId>org.uncommons</groupId>-->
<!--<artifactId>reportng</artifactId>-->
<!--<version>1.1.4</version>-->
<!--<scope>test</scope>-->
<!--<exclusions>-->
<!--<exclusion>-->
<!--<groupId>org.testng</groupId>-->
<!--<artifactId>testng</artifactId>-->
<!--</exclusion>-->
<!--</exclusions>-->
<!--</dependency>-->
<dependency>
<groupId>org.uncommons</groupId>
<artifactId>reportng</artifactId>
<version>1.1.4</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
</exclusion>
</exclusions>
<version>1.1.6</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/reportng-1.1.6.jar</systemPath>
</dependency>
<dependency>
<groupId>velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.0</version>
</dependency>
<!-- 依赖Guice -->
<dependency>
<groupId>com.google.inject</groupId>
......@@ -211,7 +235,31 @@
<dependency>
<groupId>com.codeborne</groupId>
<artifactId>selenide</artifactId>
<version>5.0.0</version>
<version>4.4.3</version>
<exclusions>
<exclusion>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.4.0</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>
</dependencies>
......
......@@ -35,6 +35,7 @@ public class MysqlConnPool {
@Value("${db.maxtotal}")
int maxtotal;
public static BasicDataSource bds;
public DuibaLog log = DuibaLog.getLogger();
......
package base;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import org.testng.*;
......@@ -8,7 +10,7 @@ import org.testng.*;
* Created by mabo on 2018/9/29
*/
public class TestListener implements ITestListener {
private static DuibaLog logger = DuibaLog.getLogger();
public DuibaLog logger = DuibaLog.getLogger();
public void onFinish(ITestContext context) {
Iterator<ITestResult> listOfFailedTests = context.getFailedTests().getAllResults().iterator();
......@@ -33,15 +35,22 @@ public class TestListener implements ITestListener {
// TODO Auto-generated method stub
logger.info("on " + Thread.currentThread().getId());
Reporter.setCurrentTestResult(result);
logger.info("----------------------------"+result.getName()+"----------------------------");
logger.info(stampToDate(String.valueOf("start time:"+result.getStartMillis())));
logger.info("current Thread:" + Thread.currentThread().getId());
}
public void onTestSuccess(ITestResult result) {
// TODO Auto-generated method stub
logger.info("end time:"+stampToDate(String.valueOf(result.getEndMillis())));
}
public void onTestFailure(ITestResult result) {
// TODO Auto-generated method stub
logger.info("end time:"+stampToDate(String.valueOf(result.getEndMillis())));
}
public void onTestSkipped(ITestResult result) {
......@@ -86,4 +95,16 @@ public class TestListener implements ITestListener {
}
}
/*
* 将时间戳转换为时间
*/
public static String stampToDate(String s){
String res;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long lt = new Long(s);
Date date = new Date(lt);
res = simpleDateFormat.format(date);
return res;
}
}
\ No newline at end of file
......@@ -91,7 +91,7 @@ public class Authorization {
dafuwengCookiesMap.put(uid,dafuwengCookies);
i--;
}
if(dafuwengCookies==null || i==0){
if((dafuwengCookiesMap.get(uid)==null||dafuwengCookiesMap.get(uid).size()==0)){
logger.info("dafuweng登陆app失败,cookies为null");
}
return dafuwengCookiesMap.get(uid);
......
package ui.cases;
/**
* Created by mabo on 2018/11/15
*/
import org.testng.Assert;
import org.testng.ITestResult;
import org.testng.Reporter;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* Created by mabo on 2018/11/15
*/
public class mytest {
@Test
public void careInterfaceSmoke(){
Assert.assertEquals(1,2);
}
@AfterMethod(alwaysRun = true)
public void afterMethod(ITestResult result) throws Exception {
if (!result.isSuccess())
catchExceptions(result);
}
public void catchExceptions(ITestResult result) {
System.out.println("result" + result);
String methodName = result.getName();
System.out.println(methodName);
if (!result.isSuccess()) {
File file = new File("");
Reporter.setCurrentTestResult(result);
System.out.println(file.getAbsolutePath());
Reporter.log(file.getAbsolutePath());
String filePath = file.getAbsolutePath();
filePath = filePath.replace("/opt/apache-tomcat-7.0.64/webapps", "http://172.18.44.114:8080");
Reporter.log("<img src='" + filePath + "/" + result.getName() + ".jpg' hight='100' width='100'/>");
int width = 100;
int height = 100;
String s = "这是一张测试图片";
File screenShotFile = new File(file.getAbsolutePath() + "/" + result.getName() + ".jpg");
Font font = new Font("Serif", Font.BOLD, 10);
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = (Graphics2D) bi.getGraphics();
g2.setBackground(Color.BLACK);
g2.clearRect(0, 0, width, height);
g2.setPaint(Color.RED);
FontRenderContext context = g2.getFontRenderContext();
Rectangle2D bounds = font.getStringBounds(s, context);
double x = (width - bounds.getWidth()) / 2;
double y = (height - bounds.getHeight()) / 2;
double ascent = -bounds.getY();
double baseY = y + ascent;
g2.drawString(s, (int) x, (int) baseY);
try {
ImageIO.write(bi, "jpg", screenShotFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package ui.cases;
import base.DuibaLog;
import com.codeborne.selenide.WebDriverRunner;
import com.codeborne.selenide.testng.ScreenShooter;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.testng.Assert;
import org.testng.ITestResult;
import org.testng.Reporter;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import ui.common.ProxyFactory;
import ui.common.StatusCheckor;
import ui.common.WebDriverFactory;
import ui.common.WebDriverType;
import java.io.File;
import java.io.IOException;
import static com.codeborne.selenide.Condition.text;
import static com.codeborne.selenide.Selenide.$;
import static com.codeborne.selenide.Selenide.open;
/**
* Created by mabo on 2018/10/18
*/
//@Listeners({ ScreenShooter.class})
public class test {
// StatusCheckor checkor=new StatusCheckor();
WebDriver driver= WebDriverFactory.createWebDriver(WebDriverType.CHRMOE, ProxyFactory.createProxy());
@Test
public void test() throws IOException {
ScreenShooter.captureSuccessfulTests = true;
//StatusCheckor checkor=new StatusCheckor();
// ProxyFactory.addCheckor(checkor);
WebDriverRunner.setWebDriver(driver);
open("https://www.baidu.com");
$(By.id("kw")).setValue("selenium");
Assert.assertEquals(1,2);
// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); //转换时间格式
// String time = dateFormat.format(Calendar.getInstance().getTime()); //获取当前时间
}
@Test
public void test1(){
Reporter.log("rererfddfdfdfdfdfdf");
Reporter.log("rererfddfdfdfdfdfdf");
Reporter.log("rererfddfdfdfdfdfdf");
Reporter.log("rererfddfdfdfdfdfdf");
Reporter.log("rererfddfdfdfdfdfdf");
Reporter.log("rererfddfdfdfdfdfdf");
}
@Test
public void test2(){
Reporter.log("rererfddfdfdfdfdfdf");
Reporter.log("rererfddfdfdfdfdfdf");
Reporter.log("rererfddfdfdfdfdfdf");
Reporter.log("rererfddfdfdfdfdfdf");
Reporter.log("rererfddfdfdfdfdfdf");
Reporter.log("rererfddfdfdfdfdfdf");
Assert.assertEquals(1,2);
}
@AfterMethod(alwaysRun = true)
public void afterMethod(ITestResult result) throws Exception {
if (!result.isSuccess())
catchExceptions(result);
}
public void catchExceptions(ITestResult result) throws IOException {
File file = new File("");
Reporter.setCurrentTestResult(result);
Reporter.log(file.getAbsolutePath());
Reporter.log("<img src='" + file.getAbsolutePath() + "/" + result.getName() + ".jpg' hight='400' width='400'/>");
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); //执行屏幕截取
FileUtils.copyFile(srcFile, new File(file.getAbsolutePath() + "/" + result.getName() + ".jpg"));
}
}
package ui.common;
import base.DuibaLog;
import net.lightbody.bmp.util.HttpMessageContents;
import net.lightbody.bmp.util.HttpMessageInfo;
import java.util.ArrayList;
import java.util.List;
/**
* Created by mabo on 2018/11/13
*/
public abstract class Checkor {
DuibaLog logger=DuibaLog.getLogger();
String name;
List<String> failList=new ArrayList<>();
public List<String> getFailList(){
List<String> result;
result=new ArrayList<>(this.failList);
this.failList.clear();
// logger.info(failList.toString());
return result;
}
public abstract void check(io.netty.handler.codec.http.HttpResponse httpResponse, HttpMessageContents httpMessageContents, HttpMessageInfo httpMessageInfo);
@Override
public int hashCode(){
System.out.println(this.getClass().getName());
System.out.println(this.getClass().getName().hashCode());
return this.getClass().getName().hashCode();
}
public boolean equals(Object object){
return this.hashCode()==object.hashCode();
}
}
package ui.common;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
/**
* Created by mabo on 2018/11/13
*/
public class LimitQueue<E> implements Queue<E> {
/**
* 队列长度,实例化类的时候指定
*/
private int limit;
Queue<E> queue = new LinkedList<E>();
public LimitQueue(int limit){
this.limit = limit;
}
/**
* 入队
*/
@Override
public boolean offer(E e){
if(queue.size() >= limit){
//如果超出长度,入队时,先出队
queue.poll();
}
return queue.offer(e);
}
/**
* 出队
*/
@Override
public E poll() {
return queue.poll();
}
/**
* 获取队列
*
* @return
*/
public Queue<E> getQueue(){
return queue;
}
/**
* 获取限制大小
*/
public int getLimit(){
return limit;
}
@Override
public boolean add(E e) {
return queue.add(e);
}
@Override
public E element() {
return queue.element();
}
@Override
public E peek() {
return queue.peek();
}
@Override
public boolean isEmpty() {
return queue.size() == 0 ? true : false;
}
@Override
public int size() {
return queue.size();
}
@Override
public E remove() {
return queue.remove();
}
@Override
public boolean addAll(Collection<? extends E> c) {
return queue.addAll(c);
}
@Override
public void clear() {
queue.clear();
}
@Override
public boolean contains(Object o) {
return queue.contains(o);
}
@Override
public boolean containsAll(Collection<?> c) {
return queue.containsAll(c);
}
@Override
public Iterator<E> iterator() {
return queue.iterator();
}
@Override
public boolean remove(Object o) {
return queue.remove(o);
}
@Override
public boolean removeAll(Collection<?> c) {
return queue.removeAll(c);
}
@Override
public boolean retainAll(Collection<?> c) {
return queue.retainAll(c);
}
@Override
public Object[] toArray() {
return queue.toArray();
}
@Override
public <T> T[] toArray(T[] a) {
return queue.toArray(a);
}
}
package ui.common;
import io.netty.handler.codec.http.HttpRequest;
import net.lightbody.bmp.BrowserMobProxy;
import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.client.ClientUtil;
import net.lightbody.bmp.filters.RequestFilter;
import net.lightbody.bmp.filters.ResponseFilter;
import net.lightbody.bmp.util.HttpMessageContents;
import net.lightbody.bmp.util.HttpMessageInfo;
import org.openqa.selenium.Proxy;
import java.util.HashSet;
import java.util.Set;
/**
* Created by mabo on 2018/11/13
*/
public class ProxyFactory {
static Proxy seleniumProxy;
static Set<Checkor> checkorList=new HashSet<>();
public static void addCheckor(Checkor checkor){
checkorList.add(checkor);
}
public static Proxy createProxy(){
if (seleniumProxy!=null) return seleniumProxy;
BrowserMobProxy proxy = new BrowserMobProxyServer();
RequestCheckor requestCheckor=new RequestCheckor();
proxy.addRequestFilter(new RequestFilter() {
@Override
public io.netty.handler.codec.http.HttpResponse filterRequest(HttpRequest httpRequest, HttpMessageContents httpMessageContents, HttpMessageInfo httpMessageInfo) {
//System.out.println("请求:"+httpMessageInfo.getOriginalUrl());
requestCheckor.check(httpRequest,httpMessageContents,httpMessageInfo);
//System.out.println("是否冗余:"+requestCheckor.isRedundant);
if(requestCheckor.isRedundant){
System.out.println(requestCheckor.urlQueue.toArray());
}
return null;
}
});
proxy.addResponseFilter(new ResponseFilter() {
@Override
public void filterResponse(io.netty.handler.codec.http.HttpResponse httpResponse, HttpMessageContents httpMessageContents, HttpMessageInfo httpMessageInfo) {
for (Checkor checkor:checkorList){
checkor.check(httpResponse,httpMessageContents,httpMessageInfo);
}
//System.out.println(i++);
}
});
proxy.start();
// get the Selenium proxy object
seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
return seleniumProxy;
}
public static void main(String[] args){
addCheckor(new StatusCheckor());
addCheckor(new StatusCheckor());
System.out.println(checkorList.size());
}
}
package ui.common;
import io.netty.handler.codec.http.HttpRequest;
import net.lightbody.bmp.util.HttpMessageContents;
import net.lightbody.bmp.util.HttpMessageInfo;
/**
* Created by mabo on 2018/11/13
*/
public class RequestCheckor {
public LimitQueue<String> urlQueue=new LimitQueue<>(5);
boolean isRedundant=false;
public void check(HttpRequest httpRequest, HttpMessageContents httpMessageContents, HttpMessageInfo httpMessageInfo){
String url=httpMessageInfo.getOriginalUrl();
if(urlQueue.contains(url)){
System.out.println("冗余:"+url);
isRedundant=true;
}
urlQueue.offer(url);
}
public boolean isRedundant(){
boolean result=this.isRedundant;
this.isRedundant=false;
this.urlQueue.clear();
return result;
}
}
package ui.common;
import io.netty.handler.codec.http.HttpResponse;
import io.netty.handler.codec.http.HttpResponseStatus;
import net.lightbody.bmp.util.HttpMessageContents;
import net.lightbody.bmp.util.HttpMessageInfo;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* Created by mabo on 2018/11/13
*/
public class StatusCheckor extends Checkor{
Logger logger = LogManager.getLogger(StatusCheckor.class);
@Override
public void check(HttpResponse httpResponse, HttpMessageContents httpMessageContents, HttpMessageInfo httpMessageInfo) {
// logger.info(httpResponse.getStatus()+":"+httpMessageInfo.getOriginalUrl()+" - "+httpMessageContents.getContentType());
if(!(httpResponse.getStatus().equals( HttpResponseStatus.OK))){
logger.info(httpMessageInfo.getOriginalUrl()+":"+httpResponse.getStatus());
this.failList.add(httpMessageInfo.getOriginalUrl());
}
}
}
package ui.common;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.logging.LogType;
import org.openqa.selenium.logging.LoggingPreferences;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.safari.SafariDriver;
import java.io.File;
import java.util.Properties;
import java.util.logging.Level;
/**
* Created by mabo on 2018/11/13
*/
public class WebDriverFactory {
public static WebDriver createWebDriver(WebDriverType driverType){
Properties prop = System.getProperties();
String OS = prop.getProperty("os.name");
boolean bl=OS.startsWith("Mac");
String basePath=WebDriverType.class.getClassLoader().getResource("").getPath();
WebDriver browser=null;
String driverPath=null;
switch (driverType){
case CHRMOE:
if(bl){
driverPath=basePath+"chromedriver";
}else {
driverPath=basePath+"chromedriver.exe";
}
System.setProperty("webdriver.chrome.driver",driverPath);
//add x
new File(driverPath).setExecutable(true);
browser=new ChromeDriver();
break;
case FIREFOX:
browser=new FirefoxDriver();
break;
case SAFARI:
browser=new SafariDriver();
break;
default:
browser=new ChromeDriver();
}
return browser;
}
public static WebDriver createWebDriver(WebDriverType driverType,Proxy proxy){
// configure it as a desired capability
DesiredCapabilities capabilities = new DesiredCapabilities();
//capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS,true);
capabilities.setCapability(CapabilityType.PROXY, proxy);
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.BROWSER, Level.ALL);
capabilities.setCapability(CapabilityType.LOGGING_PREFS,logPrefs);
capabilities.setCapability(CapabilityType.SUPPORTS_APPLICATION_CACHE,false);
capabilities.setCapability(CapabilityType.SUPPORTS_LOCATION_CONTEXT,false);
capabilities.setCapability(CapabilityType.SUPPORTS_WEB_STORAGE,false);
Properties prop = System.getProperties();
String OS = prop.getProperty("os.name");
boolean bl=OS.startsWith("Mac");
String basePath=WebDriverType.class.getClassLoader().getResource("").getPath();
WebDriver browser=null;
String driverPath=null;
switch (driverType){
case CHRMOE:
if(bl){
driverPath=basePath+"chromedriver";
}else {
driverPath=basePath+"chromedriver.exe";
}
System.setProperty("webdriver.chrome.driver",driverPath);
//add x
new File(driverPath).setExecutable(true);
browser=new ChromeDriver(capabilities);
break;
case FIREFOX:
browser=new FirefoxDriver(capabilities);
break;
case SAFARI:
browser=new SafariDriver(capabilities);
break;
default:
browser=new ChromeDriver(capabilities);
}
return browser;
}
}
package ui.common;
/**
* Created by mabo on 2018/11/13
*/
public enum WebDriverType {
CHRMOE,FIREFOX,SAFARI;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment