Appium 【已解决】用例登录成功后,在执行 tearDown 的时候(driver.quit)退出登录了,导致后面用例执行失败

strayeagle · 2014年10月20日 · 最后由 SongBoya 回复于 2014年11月14日 · 4127 次阅读

遇见这样一个问题:
前一个用例是登录操作,登录成功后,由于在 tearDown 中有 driver.quit() 操作,导致该用例执行完毕后 tearDown 时就退出登录了;而后面的一个用例则是要在登录成功的状态下才能执行的:

def tearDown(self):
    # 停止所有的测试桩
    Stub().stop()
    self.driver.quit()

请问这个问题该怎样去解决?注释掉 tearDown 函数中的 self.driver.quit() 是不行的,因为 session 未结束,后面的用例无法创建新的 session。

共收到 11 条回复 时间 点赞

你可以进行用例组合

#1 楼 @xiang2743 你的意思是在登录后,继续把其他的用例不单独写,而是写在这个登录用例的后面,teardown 前,共同完成一系列的动作吗?

#2 楼 @strayeagle 你可以把登录操作进行封装,这样你的用例只需要调用一下就可以了

用例组合嗯

1、把登录作为前置条件,在@beforeSuite里面执行
2、在第二个 case 中加入登录操作

这是你的测试用例的设计有问题。
测试用例应该是独立的,无需依赖其他任何用例的。
一个用例的输入(或者说前置条件)不应该依赖上一个用例的测试结果。要保证用例放在一起可以执行,把用例拆分开来单独执行也 ok 才可以。

我们是这样实现的:
public static AppiumDriver toLogin(AppiumDriver driver, String user, String password) throws Exception {
logger.info("#####Step0.1:输入用户名和密码;" + user + " / " + password);
factory.get("用户名", driver).sendKeys(user);
factory.get("密码", driver).sendKeys(password);
logger.info("#####Step0.2:点击[登录]按钮;");
factory.get("登录", driver).click();
Sleeper.sleepMini();
return driver;
}

脚步里使用时如下:
...
driver.get(BaseURL);
driver=Login.toLogin(driver, data.get("用户名"), data.get("密码"));
...

单独写一个 driver 的继承方法,用 Map,发现 driver = null 时候创建,否则继承启动的 driver.我们现在就是这样做的。

public static AppiumDriver getManagerDriver() {


    if (size() == 0) {
        newDriver(setManagerCapability(), manager_hub_4723,
                baseDriverName_Manager);
    }
    return driver;
}

楼主有解决这个问题吗?

#9 楼 @april46 是用例设计上存在问题。每个用例保持独立性,就可以解决这个问题。

@strayeagle 谢谢~问完之后,我也调整了我的用例就解决了~~~~刚开始学写用例。。。还不是很懂。。 😄

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册