在AWS上启用S3存储桶作为sorry-cypress上传和存储屏幕截图和视频的目标,并使用正确的身份验证。可以通过以下方式进行配置:
1.首先,您需要在AWS S3中创建存储桶。
2.在您的sorry-cypress配置文件中添加以下内容:
{ "projectId": "my-project", "storage": { "type": "s3", "region": "us-west-2", "bucket": "my-s3-bucket-name", "accessKeyId": "my-aws-access-key-id", "secretAccessKey": "my-aws-secret-access-key" } }
3.确保您的IAM角色具有足够的权限来上传和读取S3存储桶。
以下是用于在sorry-cypress中启用S3存储桶的示例代码:
Cypress.Screenshot.defaults({ onAfterScreenshot($el, screenshotDetails) { Cypress.log({ name: 'screenshot', message: 'saving screenshot to s3', screenshotDetails, });
return cy.task('uploadAssetToS3', {
projectID: Cypress.config('projectId'),
runID: Cypress.config('runId'),
type: 'screenshot',
data: screenshotDetails,
});
}, });
Cypress.Commands.overwrite(
'writeFile',
(originalFn, filePath, content, encoding) => {
Cypress.log({
name: 'writeFile',
message: writing file to s3: ${filePath}
,
});
return cy.task('uploadAssetToS3', {
projectID: Cypress.config('projectId'),
runID: Cypress.config('runId'),
type: 'file',
filePath,
content,
encoding,
});
} );
Cypress.Commands.overwrite(
'readFile',
(originalFn, filePath, encoding) => {
Cypress.log({
name: 'readFile',
message: reading file from s3: ${filePath}
,
});
return cy.task('downloadAssetFromS3', {
projectID: Cypress.config('projectId'),
runID: Cypress.config('runId'),
type: 'file',
filePath,
encoding,
});
} );
Cypress.on('after:screenshot', (_, details) => {
details.path = http://${Cypress.config('baseUrl')}/${details.path}
;
});
Cypress.Commands.add('getBucketUrl', () => { const storage = Cypress.config('storage');
return https://${storage.bucket}.s3.${storage.region}.amazonaws.com
;
});
Cypress.Commands.add('uploadAssetToS3', (options) => {
const { projectID, runID, type } = options;
const s3 = new AWS.S3({ apiVersion: '2006-03-01' });
const storage = Cypress.config('storage');
const key = ${projectID}/${runID}/${type}/${uuid()}
;
const bucketUrl = Cypress.getBucketUrl();
const params = { Body: options.data || options.content || '', Bucket: storage.bucket, Key: key, };
return s3.upload(params).promise().then(() => { switch (type) { case 'screenshot': { if (!options.data.path) return '';
return `${bucketUrl}/${key}`;
}
case 'file':
return '';
default:
return '';
}
}); });
Cypress.Commands.add('downloadAssetFromS3', (options) => { const { projectID, runID, type }