c# - 如何将一个测试方法的变量传递给 C# 中的另一个测试方法?
问题描述
我必须利用在一个测试方法中初始化的字符串变量的值,并且我希望在下一个测试方法中使用相同的值
例如:TestMethod1 如下:我有一个注册表单,因为我有一个用户名字段。
我正在使用 sendkeys() 传递用户名:“Test123” ----->(这来自 excel)现在如果我重新运行脚本,我收到一个错误,因为“用户名已经存在,请输入唯一的用户名”
对于这个问题,我创建了一个用于将随机字符串附加到用户名的函数。所以新用户名将是“Test123SomeRandomstring” ---->这存储在 TestMethod1 的字符串变量中
现在我的下一个测试方法有问题,如下所示(TestMethod2),即登录TestMethod:
现在,当我尝试在用户名的帮助下登录时,我需要 TestMethod1 中的字符串变量用于在 TestMethod2 中登录。
有人能帮忙吗?
提前致谢。
注意:我只需要在 C# 中创建上面的代码
[TestMethod]
public virtual void TestRegristration()
{
try
{
LoginPage ObjLoginPage = LoginPage.GetInstance(this);
var generator = new GenerateRandomString();
var randomString = generator.RandomString();
ObjLoginPage.enterUserName(1, ObjExcelHelper, Driver, "UserName",randomString);//Enter Usernamewith some random string
ObjLoginPage.enterPassword(1, ObjExcelHelper, Driver, "Password");//Enter Password, Confirm Password and Click Register Button
}
catch (Exception ex)
{
ex.ToString();
}
}
[TestMethod]
public virtual void TestLoginWithValidCredential()
{
try
{
LoginPage ObjLoginPage = LoginPage.GetInstance(this);
ObjLoginPage.enterUserName(1, ObjExcelHelper, Driver, "UserName");//need to pass randomString here with username from TestMethod1
//ObjLoginPage.enterPassword(1, ObjExcelHelper, Driver, "Password");
}
catch (Exception ex)
{
ex.ToString();
}
}
public class GenerateRandomString
{
public string RandomString()
{
int length = 5;
// creating a StringBuilder object()
StringBuilder str_build = new StringBuilder();
Random random = new Random();
char letter;
for (int i = 0; i < length; i++)
{
double flt = random.NextDouble();
int shift = Convert.ToInt32(Math.Floor(25 * flt));
letter = Convert.ToChar(shift + 65);
str_build.Append(letter);
}
//System.Console.WriteLine(str_build.ToString());
return str_build.ToString();
}
}
解决方案
理想情况下,单个测试应该是独立的,您不应该依赖测试顺序。
下一个最好的事情是构造函数。在 MS Test 中,构造函数被调用一次。
也是ClassInitializeAttribute 类或事件 AssemblyInitialize 属性(但我发现它们是static
限制性的)。以下是官方示例:
[TestClass()] public sealed class DivideClassTest { [AssemblyInitialize()] public static void AssemblyInit(TestContext context) { MessageBox.Show("AssemblyInit " + context.TestName); } [ClassInitialize()] public static void ClassInit(TestContext context) { MessageBox.Show("ClassInit " + context.TestName); }
但是,对于您的情况,可能是一个字符串,可能static readonly
就足够了。
private static readonly Test UserId = ...
如果用户不存在,辅助方法可以创建用户,如果用户已经存在,则可以获取 id。
更新
[TestClass()]
public class MyTestClass
{
private string TestId {get; set;}
public MyTestClass()
{
var generator = new GenerateRandomString();
TestId = generator.RandomString();
[TestMethod]
public void TestRegristration()
{
...
ObjLoginPage.enterUserName(1, ObjExcelHelper, Driver, "UserName",TestId );
或者
[TestClass()]
public class MyTestClass
{
private static string TestId {get; set;}
[ClassInitialize()]
public static void ClassInit(TestContext context)
{
var generator = new GenerateRandomString();
TestId = generator.RandomString();
}
[TestMethod]
public void TestRegristration()
{
...
ObjLoginPage.enterUserName(1, ObjExcelHelper, Driver, "UserName",TestId );
推荐阅读
- javascript - Bootstrap-4 模态页脚中的可滚动文本区域
- javascript - 在输入类型 date 中限制日期
- linux - Zinc-7000 向 UART 返回未读字节的信息
- c# - 如何在树视图中显示所有目录?(C#)
- java - AutoFitTextureView 无法解析 AndroidStudio 中的符号
- angular - 关闭角度模态并在后退按钮单击时保持在同一页面上
- php - XML 解析错误 - XmlHttpObj 为空
- vue.js - Vue安装的jquery代码在DOM重新渲染上不起作用
- javascript - 溢出:在包含动态 ul 的 div 中滚动
- javascript - 节点以编程方式设置导入模块不可用的进程环境变量