New idea for remote CC
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- php
- Ambito
- testing-qa
Direzione di ricerca
Inizia esaminando l’issue #85 e il flusso esistente di coverage remoto C3, incluso il modo in cui i moduli browser Selenium, REST e Php identificano attualmente le richieste. Traccia quindi il percorso del report PHP CodeCoverage e della serializzazione, poi definisci con i maintainer il comportamento della connessione, dello streaming, della pulizia e dei test paralleli prima dell’implementazione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
After reviewing #85 (good work keep it going!) I thought of a different approach to code coverage that might work cleanly as well.
The idea:
- Before a test starts, connect to C3, this is a "long lived" connection. C3 creates a file temp file with a fixed name and watches it for data, this data is streamed back to the coverage module.
- During the test each request to the server is profiled and the serialized result (php-codecoverage library supports serialization) is atomically written to the local temp file.
- After the test ends we disconnect the stream from 1 and this prompts the remote coverage file to be removed
This could simplify things:
- We no longer need to mark each request with a cookie, which needs to be set in the browser module (Selenium, REST, or Php)
- We no longer have edge cases where fetch requests might not send cookies for example
- We cannot support parallel tests since we won't be able to know to which test the coverage belongs
Streaming coverage
We can stream coverage for each request like this using the PHP report class (copied below since its short)
final class PHP
{
public function process(CodeCoverage $coverage, ?string $target = null): string
{
$coverage->clearCache();
$buffer = "<?php
return \unserialize(<<<'END_OF_COVERAGE_SERIALIZATION'" . PHP_EOL . serialize($coverage) . PHP_EOL . 'END_OF_COVERAGE_SERIALIZATION' . PHP_EOL . ');';
if ($target !== null) {
if (!strpos($target, '://') !== false) {
Filesystem::createDirectory(dirname($target));
}
if (@file_put_contents($target, $buffer) === false) {
throw new WriteOperationFailedException($target);
}
}
return $buffer;
}
}
- Capture it like normal
- Use the
SebastianBergmann\CodeCoverage\Report\PHPreport to process it to a string - Stream the result to the calling code
- The calling code splits it using the end marker.
- Each part is deserialized to an of
Coverage, which can be merged with the base coverage object via $baseCoverage->append($unserializedCoverage)`
Optionally we could do some automatic path detection which in most cases should actually be trivial.
Thoughts?
- Lingua principale
- PHP
- Stelle
- 73
- Fork
- 46
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Codeception/c3
-
remote coverage result all 0 Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 25/100
Codeception/c3#76 · 1 commento · 1 reazione ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
Codeception/c3#58 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
Codeception/c3#41 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
Codeception/c3#40 · 5 commenti ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 45/100
Codeception/c3#37 · 3 commenti · 4 reazioni ·
Tutte le issue di Codeception/c3
Issue simili
-
[Chore] Keep one viget-block-generator skill and replicate it, instead of four tracked copies Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
hector-jewell/food-delivery-system-for-restaurant-using-php#1311 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
Sylius/SyliusGridBundle#501 ·