Playwright 可以与 Azure 库一起使用吗?

问题描述 投票:0回答:1

我是 .NET Playwright 的新手,我阅读了一些有关其后端测试功能的信息。我想知道我是否可以将 Playwright 功能与 Azure 库(如

Azure.Messaging.ServiceBus
)一起使用?我可以加入他们吗?

这是将一批消息发送到服务总线队列的代码的一部分:

for (int i = 1; i <= numOfMessages; i++)
{
    // try adding a message to the batch
    if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}")))
    {
        // if it is too large for the batch
        throw new Exception($"The message {i} is too large to fit in the batch.");
    }
}

有没有办法对 Playwright 做同样的事情,但又不重新发明轮子?如果能够使用现有的 Azure 库来进行 E2E Azure 服务总线自动化测试,那就完美了。

c# azure azureservicebus playwright e2e
1个回答
0
投票
  • 使用此参考,我可以使用 Playwright 将消息发送到 Azure 服务总线队列以实现 UI 自动化。
  • SendMessagesToAzureServiceBusQueue
    方法模拟将消息发送到 Azure 服务总线队列。使用
    numOfMessages
    变量中指定的连接字符串、队列名称和消息数以及将消息发送到 Azure 服务总线队列的过程是 Azure 服务总线应用程序中 E2E 测试的示例。
   [TestFixture]
   public class Tests
   {
       private IConfiguration _configuration;
       private ILogger<Tests> _logger;

       [SetUp]
       public void SetUp()
       {
           // Load Azure Service Bus connection string from appsettings.json
           _configuration = new ConfigurationBuilder()
               .AddJsonFile("appsettings.json")
               .Build();

           // Configure logging
           var loggerFactory = LoggerFactory.Create(builder =>
           {
               builder.AddConsole();
           });
           _logger = loggerFactory.CreateLogger<Tests>();
       }

       [Test]
       public async Task SendMessagesToServiceBus()
       {
           using var playwright = await Playwright.CreateAsync();
           var browser = await playwright.Chromium.LaunchAsync();

           try
           {
               // Redirect console output to a custom TextWriter
               Console.SetOut(new CustomTextWriter());

               // Create a Playwright page
               var context = await browser.NewContextAsync();
               var page = await context.NewPageAsync();

               page.GotoAsync("https://");

               // Check if the "send-button" is present
               var sendButton = await page.QuerySelectorAsync("#send-button");

               if (sendButton != null)
               {
                   // If the button is present, simulate clicking it
                   await sendButton.ClickAsync();

                   // Send a batch of messages to Azure Service Bus
                   string connectionString = _configuration["ServiceBusConnectionString"];
                   string queueName = "buffer-notifications"; // Replace with your queue name
                   int numOfMessages = 10; // Replace with the desired number of messages

                   await SendToServiceBus(connectionString, queueName, numOfMessages);
               }
               else
               {
                   _logger.LogInformation("The 'send-button' element is not present on the page.");
                   // Handle the absence of the button as needed
               }
           }
           catch (Exception ex)
           {
               _logger.LogError($"Error in Playwright test: {ex.Message}");
           }
           finally
           {
               // Close the browser
               await browser.CloseAsync();
           }
       }

       [Test]
       public async Task SendMessagesToAzureServiceBusQueue()
       {
           // Replace with your Azure Service Bus connection string and queue name
           string connectionString = "Your-Service-Bus-Connection-String";
           string queueName = "Your-Queue-Name";
           int numOfMessages = 5; // Specify the number of test messages to send

           try
           {
               await SendToServiceBus(connectionString, queueName, numOfMessages);
               _logger.LogInformation($"Successfully sent {numOfMessages} messages to the queue '{queueName}'");
           }
           catch (Exception ex)
           {
               _logger.LogError($"Error sending messages to Azure Service Bus: {ex.Message}");
               Assert.Fail($"Failed to send messages to Azure Service Bus: {ex.Message}");
           }
       }

       private async Task SendToServiceBus(string connectionString, string queueName, int numOfMessages)
       {
           await using var client = new ServiceBusClient(connectionString);
           var sender = client.CreateSender(queueName);

           for (int i = 1; i <= numOfMessages; i++)
           {
               var message = new ServiceBusMessage($"Message {i}");
               await sender.SendMessageAsync(message);
               _logger.LogInformation($"Message sent to {queueName}: {message.Body}");
           }

           await sender.CloseAsync();
       }
   }

   class CustomTextWriter : TextWriter
   {
       private readonly TextWriter _originalWriter;
       private readonly FileStream _outputFileStream;

       public CustomTextWriter()
       {
           _originalWriter = Console.Out;

           // Redirect console output to a file
           _outputFileStream = new FileStream("test_output.txt", FileMode.Create);
           Console.SetOut(new StreamWriter(_outputFileStream));
       }

       public override Encoding Encoding => Encoding.UTF8;

       public override void Write(char value)
       {
           _originalWriter.Write(value); // Optionally log to the original console
           _outputFileStream.WriteByte((byte)value);
       }

       public override void Write(string value)
       {
           _originalWriter.Write(value); // Optionally log to the original console
           byte[] bytes = Encoding.UTF8.GetBytes(value);
           _outputFileStream.Write(bytes, 0, bytes.Length);
       }
   }

输出:

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.