在携程使用TestNG/JUnit 并行跑Appium 有两个关键的地方

来源:互联网 发布:贵阳大数据是做什么的 编辑:程序博客网 时间:2024/05/20 11:25

转载地址:https://testerhome.com/topics/1944


在携程使用TestNG/JUnit 并行跑Appium 有两个关键的地方:

  • 独立使用的Appium Server Wrapper
  • 控制并行的Device Store Queue

Word is Cheap,示例代码如下(公布这些代码是希望大家更多的精力放到改进Appium本身):

public abstract class AbstractDeviceStore<T extends Device> implements        DeviceStore<T> {    protected static final Logger log = LoggerFactory            .getLogger(AbstractDeviceStore.class);    protected final ReentrantLock lock;    protected final Condition notEmpty;    protected final TreeSet<Device> devicesInUse = new TreeSet<>();    protected final Set<T> devices = new TreeSet<>();    protected AbstractDeviceStore() {        lock = new ReentrantLock(true);        notEmpty = lock.newCondition();    }    @Override    public Device take() throws InterruptedException {        final ReentrantLock lock = this.lock;        lock.lockInterruptibly();        try {            // log.debug("devices in use size {}", devicesInUse);            while (devicesInUse.isEmpty()) {                log.debug("take need wait ....");                notEmpty.await();            }            return devicesInUse.pollFirst();        } finally {            lock.unlock();        }    }    @Override    public void put(Device device) {        final ReentrantLock lock = this.lock;        lock.lock();        try {            devicesInUse.add(device);            notEmpty.signal();        } finally {            lock.unlock();        }    }    @Override    public Set<T> getDevices() {        return new TreeSet<T>(devices);    }}

0 0
原创粉丝点击