How to avoid API requests shown when call npx cypress open? - cypress

I'm writing tests using Cypress for the UI of an application that has polling - it makes API requests every 2 seconds.
I would like to run the tests in the --headed mode (by npx cypress open) and to see in the list only the steps that I wrote for the UI, and not the requests which happen a lot and are polluting the list of the steps.
I haven't found any command in the Cypress documentation for that so far, would appreciate any help!

Related

Cypress tests against devtools port only

We use some third party enterprise software ("Container App"), which has an embedded Chromium browser, in which our webapp runs.
We use Cypress to test our webapp in a stand-alone browser outside of this container, however we would like to be able to test it inside, as it interacts with the container in various ways through javascript.
The only thing the container exposes is a "remote devtools-url" to the target (our) browser, which can be pasted to a native browser outside of the container and then debugged in devtools. Like this:
The Container provides 2 different url's for above debugging purposes, and they both work and seemingly similarly. They are something like the following (not precise, unfortunately I am not at work atm):
devtools://...inspector.html?id=xxx
http://ip/...inspector.html?id=xxx
Is it possible to setup Cypress to test "as normal", only having access to this remote devtools-url/port?
The target browser inside the container cannot be started by Cypress, as only the container can start and close it. So the target browser will already be running (with a --remote-debugging-port). I can get the devtools-id dynamically through a call to /json/list.
If not possible, any other way to achieve the goal of testing the browser/app running inside the container?
It is not possible. Testing with Cypress a web page in embedded Chromium running in your application means Cypress needs to connect to already running browser. Cypress doesn't have that possibility.
The documentation states:
When you run tests in Cypress, we launch a browser for you. This enables us to:
Create a clean, pristine testing environment.
Access the privileged browser APIs for automation.
There is a request in Cypress issue tracker to add the option to connect to already running browser. But there is no response on it from Cypress developers.

Faking non-XHR network requests for Cypress

I have an AngularJS application and I'm trying to use Cypress to stub some of the network requests that it makes. Currently, my problem is with a request with resource type Img. I know from Cypress documentation that Cypress cannot stub non-XHR resource types/requests, but I'm looking for a workaround.
My application requests the image from a backend server, which I want to stub or fake. I prefer not to modify the application code, and would rather create an external workaround.
I've looked into the following and found them not to be useful in this scenario:
Sinon.js - Similarly can only handle XHR requests.
nock - Replaces node's http.request, but that doesn't seem to work within Cypress. It might work if I added it straight into my application code, which I prefer not to do.
I've also tried the following but was unsuccessful:
mockserver - Ran the mockserver and added an expectation, but none of the requests made to the mockserver seemed to go through.
Service Worker API - Was unsure about how to register my service worker, since it requires a .js file as an input. What .js file would be served as input if I'm controlling the service worker via Cypress?
a mock server using express - The issue is the application is running on localhost:<some_port>, while the mock server is running on localhost:<some_other_port>. I'm having trouble specifying port numbers when constructing the request through the application. Basically, my application isn't really respecting different port numbers.
EDIT:
I've been successful with creating a mock server using express. According to Cypress documentation, servers shouldn't be started and stopped within before() and after()'s. Instead, they should be started prior to Cypress being started, and stopped after Cypress is stopped.

Cypress secure to use with production data

I am trying to use cypress for running some monitoring tests on production.I am also using snapshot match plugin to compare screenshots.
I just want to know is this safe to do ?
I am not using any dashboard services from cypress -just running tests on our local machines-will cypress sent any info outside our network?
Cypress doesn't send anything to Cypress's servers unless you specifically configure it to - it's safe.
The only other thing is, by default, Cypress will send crash reports (when Cypress itself crashes) to be analyzed. You can turn this off by following the instructions here.

How to e2e test multiple client synchronization?

I am writing e2e tests where I want to test that when I add an entity on one client, the other online client will be synced and see the added entity. (Think google docs when you type and the words appear on the other users' screens).
My question is: how can I e2e test client synchronization through WebSockets?
Should I mock WebSockets if possible? Should I find an e2e framework that allows multiple tabs/ browser instances and test that the clients sync like that? Is there another way?
I have looked at applications that also use synchronization like these: https://github.com/automerge/trellis/blob/master/test/application.js and https://github.com/automerge/pixelpusher. Unfortunately, they either don't have tests or don't use WebSockets.
I think the simplest way would be to start two tests simultaneously like this:
create a new script entry in the scripts section of the package.json file:
"scripts" : {
"testcafe": testcafe chrome,
"test-synchro": npm run testcafe -- test1.js & npm run testcafe -- test2.js
}
in test1.js you add one entity then create a json file that contains all information on the new entity.
in test2.js you wait for this file to be present and stable in the file system and then you act on it. Maybe you could use package wait-on to achieve this.

JMeter HTTP Test Script Recorder randomly stops recording

I am creating recordings for a company website for performance tests. Normally this works fine though on occasion when starting a new test recording, HTTP Test Script Recorder will not record anything but returns the following error in the browser:
I have been using jmeter for a while now so I know the setup for HTTP Test Script Recorder is ok.
Clearing browser history, running in public or private mode doesn't help. Re-issuing jmeter proxy cert makes no difference either, the same for deleting proxyserver.jks.
Having experienced this before, I know that after a few days HTTP Test Script Recorder will start working again.
Happens for both jmeter v4 & v5.
I can think only of one situation when it can happen:
You have a JMeter test running in background (or a thread which failed to stop for some reason)
You're trying to record something at the same time
So
Make sure that nothing is running at the moment (you should see 0/0 in upper right corner of JMeter GUI)
Start clean recording session, to wit restart JMeter and create the test plan using Recording Template feature (From main menu choose File -> Templates -> Recording and click "Create"
Just in case be aware that you can also record your mobile application traffic using cloud-based proxy service, as a bonus you will get possibility to export recorded scripts in SmartJMX mode with automated detection and correlation of the dynamic parameters. Check out How to Cut Your JMeter Scripting Time by 80% article for more details if interested.
The issue you see is most probably a bug probably introduced by:
https://bz.apache.org/bugzilla/show_bug.cgi?id=57962
During recording, JMeter variables are null so we end up using an Unmodifiable version of them because of this:
https://github.com/apache/jmeter/blob/trunk/src/core/org/apache/jmeter/threads/JMeterContext.java#L88
I suggest you open a bug here, providing as much information as possible:
https://jmeter.apache.org/issues.html
Provide:
How you reproduce it
The jmeter.log with the stacktrace (not as an image)
The workaround is to avoid running a test and recording after that.
Edit on 3 december 2018:
You reported a bug:
https://bz.apache.org/bugzilla/show_bug.cgi?id=62916
The reproducer is:
Start a distributed test where Controller is in GUI mode and a jmeter-server
Once test is finished, start a Recording using HTTP(S) Test Script Recorder
Hit a URL, you'll get the issue
The bug has been fixed today, it will be available in JMeter 5.1 and is already available in:
https://ci.apache.org/projects/jmeter/nightlies/

Resources