首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态化用户名和密码

如何动态化用户名和密码
EN

Stack Overflow用户
提问于 2018-01-23 15:06:34
回答 2查看 825关注 0票数 0

如何使用数据驱动或动态用户名和密码,当我在黄瓜中输入参与者名称时,应该使用相应的密码,可能来自json文件,或者取决于参与者。

所以当我在特性文件中输入这个

//example.Fee

代码语言:javascript
复制
      Feature: Add item and place the order for that item
      In order to wear something new
      As an online shopping customer
      I want to be able to add an item to my shopping bag and then place the order

      Scenario: Add an item to shopping bag to place the order using Paypal
        Given that "Bruno" is logged in to his "admin" account
         When he searches and adds an item from "men" section to his shopping bag
         Then he can place the order

// example.steps.ts

代码语言:javascript
复制
import { Actor } from "serenity-js/lib/screenplay";
import { BrowseTheWeb } from "serenity-js/lib/screenplay-protractor";
import { protractor } from "protractor";
import { Start, AddItemsToShoppingBag } from "../website-model/src/index";
import { Authenticate } from '../website-model/src/ability/authenticate';

protractor.browser.ignoreSynchronization = true;

export = function selectItemSteps() {
  let actor = Actor.named('Bruno').whoCan(BrowseTheWeb.using(protractor.browser));

  this.Given(/^that "([^"]*)" is logged in to his "([^"]*)" account$/, function (name: string, pageUrl: string) {
    return actor.attemptsTo(
      Start.LaunchUrl(pageUrl, name),
    );
  });

  this.When(/^he searches and adds an item from "([^"]*)" section to his shopping bag$/, function (gender:string) {
    return actor.attemptsTo(
      AddItemsToShoppingBag.called(gender)
  );
  });

  this.Then(/^he can place the order$/, function () {
    return actor.attemptsTo(
      // PlaceOrder.hjgkhaksdjh()
    );
    // expect(james.toSee(thankYouPageElementsMap(lbl_thank_you).Displayed)).eventually.equal('Thank You');
  });
}

//登录-user.ts

代码语言:javascript
复制
    import { Task, step, PerformsTasks } from "serenity-js/lib/screenplay";
import { Click, Enter } from "serenity-js/lib/screenplay-protractor";
import { homePageElementsMap } from "../interactions/html-elements/pages-elements-maps/home-page-elements-maps";
import { loginPageElementsMap } from "../interactions/html-elements/pages-elements-maps/login-page-elements-map";

export class LoginUser implements Task {

  static called(name: string): LoginUser {
    return new LoginUser(name);
}
  @step('{0} Login Page - Login Bruno')
  performAs(actor: PerformsTasks): PromiseLike<void> {
    return actor.attemptsTo(
      Click.on(homePageElementsMap.lnk_login),
      Enter.theValue('test@test.com').into(loginPageElementsMap.txt_login_email),
      Enter.theValue('password111').into(loginPageElementsMap.txt_login_pwd),
      Click.on(loginPageElementsMap.btn_login)
    );
  }

  constructor(private name: string) {
  }
}
EN

回答 2

Stack Overflow用户

发布于 2018-01-24 10:22:19

实施步骤

代码语言:javascript
复制
Given that "Bruno" is logged in to his "admin" account

要随机选择用户,请执行以下操作。您可以从文件中随机选择它们,或者从相当于Enum或Collection的类型抄本中随机选择它们。

注意:目前您正在将"Bruno“赋值在您的步骤定义之外。我认为这种不好的做法是因为您的测试的实现与您的步骤没有关联(例如,在它们之外发生的事情),这可能会导致不正确的特性文件/意外行为。例如:如果您将步骤更改为

代码语言:javascript
复制
Given that "Bob" is logged in to his "customer" account

这将不会自动工作,因为你仍然硬编码的演员成为布鲁诺。

您仍然需要在步骤之间共享状态(即场景中的所有步骤都需要知道哪个参与者登录到哪个帐户中)。

票数 0
EN

Stack Overflow用户

发布于 2018-01-29 12:51:32

我使用一些奇怪的语法对此采取以下方法。

与应用程序中的大多数东西相比,用户是非常不寻常的,因为他们知道应用程序不知道的东西(他们的密码)。因此,要登录,您不能使用固定装置或工厂从数据库中获取现有用户。

我在测试代码中所做的是专门为用户创建一个类。我把这叫做TUser。在我的测试世界中,我只用他们的名字来识别一个用户,然后生成其他的一切,包括他们的密码。因此,如果有用户Bruno,我的代码将

  • 调用TUser.new(first_name: Bruno)给我用户并将其存储在一个变量中,让我们为本例提供@bruno
  • 使用该用户创建数据库记录,例如create_user( user:@bruno)
  • 访问登录页面并通过向@bruno查询e.g.`fill_in(:password,with:@bruno.password)来填写详细信息

做这件事的小腿会读到

Given there is a user Bruno When Bruno signs in Then Bruno should ...

**以上均为红宝石**

您可以在我的一个样本项目中看到更详细的版本。有了Txxx类来创建特定实体的测试版本,一旦您克服了它们最初的奇异性,就会非常强大。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48404840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档