我想用端到端测试来测试我的Rest API.据我了解,集成测试之间的区别在于我们不进行内存系统配置,而是使用真实的测试数据库和网络请求.
但我无法理解如何处理第三方API请求(如GitHub或Bitbucket API).
创建假冒Github帐户是否正常,我的测试会提取假数据?
如何处理访问令牌,并非所有服务都是公开的,甚至公共服务都可能因速率限制而失败.
我的问题很简单,但我不明白是否可能,在这种情况下它是如何可能的?我想在角度应用程序中使用puppeteer库. https://www.npmjs.com/package/puppeteer这是npm安装.但我不明白我是如何使用它的.例如,我只想制作这个脚本:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({path: 'example.png'});
await browser.close();
})();Run Code Online (Sandbox Code Playgroud)
在角度组件中,有人可以帮助我(我能够理解很多东西)
提前谢谢,抱歉我的英语不好,我是法国人
只有当 chrome 无头时,才能在 docker 机器上运行 chrome。不幸的是,无头 chrome 无法忽略阻止我的测试运行的证书错误。
我正在尝试在 docker 容器上运行一个已经在运行的 NodeJS e2e 测试环境。大多数测试都通过了,但是当一个站点需要证书时,它就无法访问。在无头 chrome 上,我可以简单地忽略认证错误。安装在容器上的基础 docker 镜像是 Node:8
{
browserName: 'chrome',
chromeOptions: {
binary: puppeteer.executablePath(),
args: [
'--lang=en-US','--headless','--no-sandbox','--ignore-certificate-errors'
]
}
Run Code Online (Sandbox Code Playgroud)
预期的结果是要么在 docker 容器上运行带有 gui 的 chrome,要么以某种方式忽略无头 chrome 中的服务器证书错误。
在这个项目中,它使用 NestJS 和 TypeORM。对于真正的API请求,CRUD操作是在MySQL(使用AWS RDS)上进行的。
现在我尝试使用 SQLite(In-Memory) 来测试 API 结果。
我在单元测试中成功实现了这一点,如下代码。
首先,下面是create-memory-db.ts,它返回到内存 SQLite 数据库的连接。
type Entity = Function | string | EntitySchema<any>;
export async function createMemoryDB(entities: Entity[]) {
return createConnection({
type: 'sqlite',
database: ':memory:',
entities,
logging: false,
synchronize: true,
});
}
Run Code Online (Sandbox Code Playgroud)
describe('UserService Logic Test', () => {
let userService: UserService;
let connection: Connection;
let userRepository: Repository<User>;
beforeAll(async () => {
connection = await createMemoryDB([User]);
userRepository = await connection.getRepository(User);
userService = new UserService(userRepository);
});
afterAll(async () => { …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Playwright 迭代动态元素列表,我已经尝试了一些方法,但没有一个有效:
await this.page.locator('li').click();
const elements = await this.page.locator('ul > li');
await elements.click()
Run Code Online (Sandbox Code Playgroud)
await this.page.$$('ul > li').click();
Run Code Online (Sandbox Code Playgroud)
await this.page.click('ul > li');
Run Code Online (Sandbox Code Playgroud)
const divCounts = await elements.evaluateAll(async (divs) => await divs.click());
Run Code Online (Sandbox Code Playgroud)
this.page.click('ul > li > i.red', { strict: false, clickCount: 1 },)
Run Code Online (Sandbox Code Playgroud)
const elements = await this.page.$$('ul > li > i.red')
elements.forEach(async value => {
console.log(value)
await this.page.click('ul > li > i.red', { strict: false, clickCount: 1 },)
await value.click();
})
Run Code Online (Sandbox Code Playgroud)
尽管我很喜欢 Cypress,但结果却开始变得很糟糕。我不认为我会做一些根本错误的事情。我已经阅读了几次最佳实践,但我看不出我可以真正改进什么。
它开始变得相当令人沮丧。让测试在本地机器上完美运行(尝试连续运行多次),但是当相同的代码通过 CI(当前是 Bitbucket Pipelines)运行时,一些测试由于奇怪的原因而失败。
例如,单击列表中的一个项目会在购物车中添加一个项目。工作完美,但我试图打破它,但由于某种原因,CI 中的相同测试使点击发生两次。这是我至少能够描述的一个问题。其他人不正常,并且经常随机发生,就像该元素不可见,但查看屏幕截图我可以看到就好了。
我尝试使用cypress-failed-log插件来查看命令日志,但这并没有真正的帮助,因为它与我在本地看到的相同,但在 CI 中却失败了。我在 Cypress Dashboard 中看到的视频也没有那么有用,因为它通常太快了,有些东西甚至在那里看不到。
有人可以就如何更优雅地处理手头的问题向我建议一些其他选择吗?我必须承认我即将放弃这些测试,因为让它们变得可靠需要太多时间。
关于我的设置的一些细节:
cypress-failed-log@2.5.0
cypress-testing-library@3.0.1
cypress@3.3.1
# job definition for running E2E tests in parallel
e2e: &e2e
name: E2E tests
image: cypress/browsers:chrome67-ff57
caches:
- yarn
- home-cache
script:
- yarn -v
- cd cypress
- yarn install --frozen-lockfile
- npx @bahmutov/print-env BITBUCKET
- yarn ci --parallel --ci-build-id $BITBUCKET_BUILD_NUMBER
Run Code Online (Sandbox Code Playgroud) 有没有办法确保浏览器不会从初始窗口大小更改.在测试期间点击了几个导致窗口最大化的东西,但我希望它始终保持相同的大小.
我在maven有一个java项目,我知道maven把东西常规使用
一切都在测试/通常是单元测试.但是,如果我想引入集成测试和E2E测试呢?我该如何放入正确的文件夹结构?组织这些的正确方法是什么?
可能是这样的:
?
但这样做会假设src/test/java指的是单元测试.我宁愿明确指定
我正在使用量角器和茉莉花.
我已经确定Chrome驱动程序版本:2.32.498550 (latest)与chrome beta不兼容(Version 62.0.3202.18 (Official Build)).
它在语句之类的时候就会中断
browser.driver.manage().window().maximize()
Run Code Online (Sandbox Code Playgroud)
要么
browser.driver.manage().window().getSize()
Run Code Online (Sandbox Code Playgroud)
浏览器窗口的执行.
谁能帮我这个 ?
jasmine selenium-chromedriver selenium-webdriver protractor e2e-testing
我正在使用jest-puppeteer来运行我的网络测试.如果我运行我在一个文件中定义的测试,一切都很完美.
describe('user', () => {
jest.setTimeout(12000);
beforeEach(async () => {
await page.setViewport({width: 1200, height: 2000});
await page.goTo('http://localhost:3000');
});
it('test 1', async () => {
//my test steps
});
it('test 2', async () => {
//my test steps
});
});
Run Code Online (Sandbox Code Playgroud)
但是,如果我在自己的文件中运行每个测试,我会收到错误.
UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'addExpectationResult' of undefined
Run Code Online (Sandbox Code Playgroud)
文件1
describe('user', () => {
jest.setTimeout(12000);
beforeEach(async () => {
await page.setViewport({width: 1200, height: 2000});
await page.goTo('http://localhost:3000');
});
it('test 1', async () => {
//my test steps
});
});
Run Code Online (Sandbox Code Playgroud)
文件2
describe('user', () …Run Code Online (Sandbox Code Playgroud) e2e-testing ×10
javascript ×2
node.js ×2
protractor ×2
puppeteer ×2
testing ×2
angular ×1
api ×1
cypress ×1
docker ×1
jasmine ×1
java ×1
jestjs ×1
maven ×1
nestjs ×1
playwright ×1
rest ×1
selenium ×1
typeorm ×1
typescript ×1
ubuntu ×1
unit-testing ×1
web-testing ×1
webtest ×1